当我运行以下代码时,它输出‘Promise 1’,即使在竞争中第一个解决的Promise应该是Promise 2,并且应该输出‘Error Promise 2’.作为‘Promise 1’的输出背后的逻辑是什么?
根据mdn docs,".如果第一个解决promise 被履行,则它履行,如果第一个解决promise 被拒绝,则它拒绝."
try{
// Promise 1
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve('Promise 1'), 2000);
});
// Promise 2
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => reject('Error Promise 2'), 2000);
});
// Promise 3
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => reject('Error Promise 3'), 2000);
});
const result = await Promise.race( [promise2, promise1, promise3]);
console.log(result);
} catch(err) {
console.log(err.message);
}
它的输出: promise 1
根据MDN文件,大约有Promise.race
份,它说:
当您希望第一个异步任务完成,但不关心其最终状态(即它可能成功也可能失败)时,它很有用.