承诺在下一次之前不等待解决

Hyd*_*erA 3 javascript promise

码:

var x = new Promise((resolve, reject) => {
    setTimeout( function() {
        console.log( 'x done' );
        resolve()
    }, 1000 );
});


Promise.resolve().then(x).then((resolve, reject) => {
    console.log( 'all done' );
});
Run Code Online (Sandbox Code Playgroud)

输出:

all done
x done
Run Code Online (Sandbox Code Playgroud)

预期产量:

x done
all done
Run Code Online (Sandbox Code Playgroud)

x在调用下一个then回调之前,为什么承诺没有等待解决?

JSFiddle:https://jsfiddle.net/puhbqtu0/1/

ale*_*mac 6

因此,当您想要在一系列中运行promises时,您应该转换x为函数并将其调用then:

function x() {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('x done');
      resolve()
    }, 1000);
  });
});

Promise.resolve()
  .then(x)
  .then(() => console.log('all done'));
Run Code Online (Sandbox Code Playgroud)

或最简单的变体:

x().then(() => console.log('all done'));
Run Code Online (Sandbox Code Playgroud)

jsfiddle演示

  • 这很可能是一种反模式,最终可能会导致未处理的拒绝。你不应该将承诺注入到这样的链中。 (2认同)