gpt4 book ai didi

node.js - 拆分链时 promise 链接

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:18 25 4
gpt4 key购买 nike

在下面的代码中

var p = new Promise((resolve, reject) => {
console.log('a');
resolve();
});

p.then(() => {
console.log('b');

}).then(() => {
console.log('c');
});

p.then(() => {
console.log('z');
})

我希望控制台输出是:一种bCz

相反,我得到了:一种bz

但是使用这段代码我得到了预期的结果

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 都会返回给您新的 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 返回的 promise :

var a = new Promise(foo('a'));
var b = a.then(foo('b'));
var p = b.then(foo('c'));
p.then(foo('z'));

您不应依赖一级解析顺序。因为这最终会发生并且顺序实际上是未定义的(取决于内部实现)。

关于node.js - 拆分链时 promise 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com