当我执行下面的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));