bluebird - 在返回另一个承诺时承诺订单

时间:2015-11-13 10:52:58

标签: promise bluebird

我正在尝试使此代码按顺序执行console.logs(test1,test2,test3)。现在是test1,test3,test2。我期待第二个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

1 个答案:

答案 0 :(得分:2)

承诺是不可改变的。他们广播他们的价值。一旦一个承诺以一个值结算,它将永远具有该值。

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

在上面的示例中,两个都将在解析后执行 并且不会彼此等待。这是有道理的,因为承诺是不可改变的。

您可以更改承诺参考,因为then会返回新承诺:

promise = promise.then(...