在setTimeout
外部和setTimeout
内部的getStates()
函数中,promise(p1、p2、p3)的执行方式如何不同?
const p1 = new Promise((res) => setTimeout(() => res(100), 100));
const p2 = new Promise((res) => setTimeout(() => res(200), 200));
const p3 = new Promise((res, rej) => setTimeout(() => rej(300), 100));
async function getStates() {
console.log(await promiseState(p1));
console.log(await promiseState(p2));
console.log(await promiseState(p3));
}
console.log("Immediately after initiation:");
getStates();
setTimeout(() => {
console.log("After waiting for 100ms:");
getStates();
}, 100);
promiseState
功能是from MDN并使用Promise.race
:
function promiseState(promise) {
const pendingState = { status: "pending" };
return Promise.race([promise, pendingState]).then(
(value) =>
value === pendingState ? value : { status: "fulfilled", value },
(reason) => ({ status: "rejected", reason }),
);
}
这都是MDN Promise.race
page名中的一个例子.
我认为所有Promises都应该返回pendingState对象,但setTimeout
函数的情况并非如此.