拆分链时承诺链接
promise chaining when splitting the chain
在下面的代码中
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
z
相反,我得到了:
一种
b
z
c
但是使用这段代码我得到了预期的结果
var p = new Promise((resolve, reject) => {
console.log('a');
resolve();
}).then(() => {
console.log('b');
}).then(() => {
console.log('c');
});
p.then(() => {
console.log('z');
})
谁能解释一下在这种情况下 promise 链接的完成方式?
每个 then
returns 你新 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');
});
时间线:
- 初始解析 // a
- p 独立解析 // b, z
- a 已解决 // c
在第二种情况下,您的 p
指向上一个 then
:
返回的承诺
var a = new Promise(foo('a'));
var b = a.then(foo('b'));
var p = b.then(foo('c'));
p.then(foo('z'));
您不应该依赖一级解析顺序。因为这最终会发生并且顺序实际上是未定义的(取决于内部实现)。
在下面的代码中
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 z
相反,我得到了: 一种 b z c
但是使用这段代码我得到了预期的结果
var p = new Promise((resolve, reject) => {
console.log('a');
resolve();
}).then(() => {
console.log('b');
}).then(() => {
console.log('c');
});
p.then(() => {
console.log('z');
})
谁能解释一下在这种情况下 promise 链接的完成方式?
每个 then
returns 你新 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');
});
时间线:
- 初始解析 // a
- p 独立解析 // b, z
- a 已解决 // c
在第二种情况下,您的 p
指向上一个 then
:
var a = new Promise(foo('a'));
var b = a.then(foo('b'));
var p = b.then(foo('c'));
p.then(foo('z'));
您不应该依赖一级解析顺序。因为这最终会发生并且顺序实际上是未定义的(取决于内部实现)。