bluebird - 返回另一个承诺时的承诺顺序

bluebird - promise order when returning another promise

我试图让这段代码按顺序执行 console.logs(测试 1、测试 2、测试 3)。现在是测试 1、测试 3、测试 2。我原以为第二个 then() 会在开始之前等待 resolve() 函数,但它不起作用:)

var bluebird = require('bluebird');

var promise = bluebird.resolve(true);
promise.then(function() {
  return new bluebird(function(resolve, reject) {
    console.log("test1");

    setTimeout(function() {
      console.log("test2");
      resolve();
    }, 3000);
  });
});

promise.then(function() {
  console.log("test3");
});

http://requirebin.com/?gist=7ba0a8500400bfa7fd22

承诺是不可变的。他们传播自己的价值。一旦 promise 解析为一个值,它将永远具有该值。

var p = Promise.resolve(3);
p.then(() => console.log(1));
p.then(() => console.log(2));

在上面的例子中,两者都会在p resolved后执行,不会互相等待。这是有道理的,因为承诺是不可变的。

您可以更改承诺参考,因为 then returns 新承诺:

promise = promise.then(...