在以下代码中
var p = new Promise((resolve, reject) => {
console.log('a');
resolve();
});
p.then(() => {
console.log('b');
}).then(() => {
console.log('c');
});
p.then(() => {
console.log('z');
})
我希望控制台输出为: 一个 b C ž
相反,我得到了: 一个 b ž ç
但是使用此代码我得到了预期的结果
var p = new Promise((resolve, reject) => {
console.log('a');
resolve();
}).then(() => {
console.log('b');
}).then(() => {
console.log('c');
});
p.then(() => {
console.log('z');
})
在这种情况下,有人可以解释保证链接的方式吗?
答案 0 :(得分:0)
每个then
都会返回新的Promise
,这取决于回调解析。
这是不同的。
var p = new Promise((resolve, reject) => {
console.log('a');
resolve();
});
var a = p.then(() => {
console.log('b');
});
a.then(() => {
console.log('c');
});
p.then(() => {
console.log('z');
});
时间表:
在第二种情况下,p
指向上一个then
返回的承诺:
var a = new Promise(foo('a'));
var b = a.then(foo('b'));
var p = b.then(foo('c'));
p.then(foo('z'));
您不应该依赖一级解决方案。因为这最终会发生,并且订单实际上是未定义的(取决于内部实现)。