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");
});
承诺是不可变的。他们传播自己的价值。一旦 promise 解析为一个值,它将永远具有该值。
var p = Promise.resolve(3);
p.then(() => console.log(1));
p.then(() => console.log(2));
在上面的例子中,两者都会在p resolved后执行,不会互相等待。这是有道理的,因为承诺是不可变的。
您可以更改承诺参考,因为 then
returns 新承诺:
promise = promise.then(...
我试图让这段代码按顺序执行 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");
});
承诺是不可变的。他们传播自己的价值。一旦 promise 解析为一个值,它将永远具有该值。
var p = Promise.resolve(3);
p.then(() => console.log(1));
p.then(() => console.log(2));
在上面的例子中,两者都会在p resolved后执行,不会互相等待。这是有道理的,因为承诺是不可变的。
您可以更改承诺参考,因为 then
returns 新承诺:
promise = promise.then(...