为什么Promise.rese([Promise.resolve(1),2]).then(console.log)返回1



为什么Promise.race()会发生这种行为,Promise.resolve(1(的计算速度比2更快?

Promise.race([Promise.resolve(1), 2]).then(console.log)

来自MDN文档

如果可迭代项包含一个或多个非promise值和/或一个已结算的promise,则promise.rece将结算到数组中找到的第一个值

const foreverPendingPromise = Promise.race([]);
const alreadyFulfilledProm = Promise.resolve(100);
const arr = [foreverPendingPromise, alreadyFulfilledProm, "non-Promise value"];
const arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(100)];
const p = Promise.race(arr);
const p2 = Promise.race(arr2);
console.log(p);
console.log(p2);
setTimeout(() => {
console.log("the stack is now empty");
console.log(p);
console.log(p2);
});
// logs, in order:
// Promise { <state>: "pending" }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: 100 }
// Promise { <state>: "fulfilled", <value>: "non-Promise value" }

基本上,Promise.racePromise.all在参数上隐式调用Promise.resolve,1刚好在2之前。

对于从then回调、await和其他几个地方返回的值也是如此,其目的是使promise和非promise代码之间的交互更容易。

相关内容

  • 没有找到相关文章

最新更新