Javascript Promise.all执行序列问题



当我执行下面的Javascript promise.all((代码时,我得到的输出是

hi
50

但这就是我所期望的输出

50
hi

有人能解释一下为什么";嗨"首先出现,然后出现50

以下是代码

let p1 = Promise.reject(50);
let p2 = true;
let p3 = new Promise((resolve, reject) => {
console.log("hi")
setTimeout(() => reject("hey"), 0);
});
Promise.all([p1, p2, p3])
.then(values =>  console.log(values))
.catch(err => console.log(err));

传递给new Promise的回调将在调用new Promise时立即同步运行。hi不仅在超时之前登录,而且在您调用Promise.all之前登录。

setTimeout(() => reject("hey"), 0);回调运行得非常晚——只有在回调运行且Promise拒绝之后,.catch才会被输入并记录拒绝值。

为了使记录的值为50 hi,您需要记录hi

(1( 在reject调用之后

(2( 在另一个微任务之后(给.catch运行时间(

let p1 = Promise.reject(50);
let p2 = true;
let p3 = new Promise((resolve, reject) => {
setTimeout(() => {
reject("hey");
// queue microtask
Promise.resolve().then(() => {
console.log("hi")
});
}, 0);
});
Promise.all([p1, p2, p3])
.then(values =>  console.log(values))
.catch(err => console.log(err));

相关内容

  • 没有找到相关文章

最新更新