gpt4 book ai didi

javascript - 使用 Promise.race 从作业队列执行和解决 promise 的顺序

转载 作者:行者123 更新时间:2023-11-29 19:02:16 24 4
gpt4 key购买 nike

我正在努力思考作业队列并解决 Javascript 中的 promise 。我使用了 Nicholas Zakas 的书“Understanding ECMAScript 6”,并且有这段关于 Promice.race() 的代码片段和描述,我加粗了,我不明白:

let p1 = new Promise(function(resolve, reject) {
resolve(42);
});

let p2 = Promise.reject(43);

let p3 = new Promise(function(resolve, reject) {
resolve(44);
});

let p4 = Promise.race([p1, p2, p3]);

p4.catch(function(value) {
console.log(value); // 43
});

这里,p4 被拒绝了,因为调用 Promise.race() 时 p2 已经处于被拒绝的状态。 即使满足 p1 和 p3,这些结果也会被忽略,因为它们发生在 p2 被拒绝之后。

我知道 Promise.race() 会在提供的所有 promise 首先得到解决后立即解决。但是为什么这本书声称 promise p1 在 p2 之后结算?如果代码从上到下,则 p1 首先出现,因此我认为它应该首先解决。是因为功能包装吗?或者我不明白的 javascript 执行命令?

有人可以为我阐明这个概念吗?

最佳答案

这本书在那个方面似乎是错误的。事实上,p1 甚至在 p2 构造之前就已完成,并且在执行该示例时,您会得到结果“42”而不是拒绝“43”。

作者可能对 new Promise 回调实际上感到困惑 is invoked synchronously ,不像所有其他 promise 回调(通过 then)。也许这个例子本来就是

let p1 = Promise.resolve().then(() => 42);
// ^^^^^^^^ asynchronous
let p2 = Promise.reject(43);
let p3 = Promise.resolve(44);

let p4 = Promise.race([
p1, // still pending
p2, // already rejected
p3 // already fulfilled
]); // so p4 will get rejected, as its callback on p2 is the first to be invoked in order
p4.then(console.log, console.error);

关于javascript - 使用 Promise.race 从作业队列执行和解决 promise 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46014339/

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