我正在尝试使此代码按顺序执行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");
});
答案 0 :(得分:2)
承诺是不可改变的。他们广播他们的价值。一旦一个承诺以一个值结算,它将永远具有该值。
var p = Promise.resolve(3);
p.then(() => console.log(1));
p.then(() => console.log(2));
在上面的示例中,两个都将在解析后执行 并且不会彼此等待。这是有道理的,因为承诺是不可改变的。
您可以更改承诺参考,因为then
会返回新承诺:
promise = promise.then(...