我创建了 3 个 promise ,p1,p3 解决,而 p2 拒绝。
代码:
let p1 = new Promise((resolve, reject) => {
resolve(42);
});
let p2 = Promise.reject(43);
let p3 = new Promise((resolve, reject) => {
resolve(44);
});
let p4 = Promise.race([p1, p2, p3]);
p4.catch((value) => {
console.log(value);
});
根据代码,p4 应该返回 43,因为 p3 运行速度比 p1 和 p2 快。当我在 Node 中运行时,它不返回任何内容。 在 Promise.race 中如何解释这种情况?
注意:请在控制台中运行此代码然后回答它。 它不会在我的本地返回任何内容。
最佳答案
正如您在示例中编写的那样,您 promise p1
、p2
和 p3
全部同时结算*。
If the iterable contains one or more non-promise value and/or an already resolved/rejected promise, then Promise.race will resolve to the first of these values found in the iterable.
虽然这些 promise 在提供给 race
时尚未结算,但由于它们同时结算,race
将使用第一个 promise 的结果列表。在本例中,它是 p1
。
所以:
p4.then(console.log) // Prints 42
并且您可以通过注意如果更改数组中 p1
、p2
和 p3
的顺序来验证这一点比赛
,您总是会看到第一个比赛的结果。
let p1 = new Promise((resolve, reject) => {
resolve(42);
});
let p2 = Promise.reject(43);
let p3 = new Promise((resolve, reject) => {
resolve(44);
});
let p4 = Promise.race([p1, p2, p3]);
let p5 = Promise.race([p2, p1, p3]);
let p6 = Promise.race([p3, p2, p1]);
p4.then(r => console.log("p4", r), r => console.log("p4", r));
p5.then(r => console.log("p5", r), r => console.log("p5", r));
p6.then(r => console.log("p6", r), r => console.log("p6", r));
关于javascript - 当参数之一拒绝时,为什么 promise.race 不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165251/