在 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);
我从 mdn 的promise.race Exmaple
获取了它我认为所有 Promises 都应该返回pendingState对象,但 setTimeout 函数中并非如此
当您创建承诺时,计时器就会启动。在
new Promise
返回承诺之前,您传递的函数 new Promise
会被称为 同步。它的工作是开始工作。
然后您立即检查承诺状态,因此它们都将处于待处理状态。
然后您等待 100 毫秒并再次检查。您的两个 Promise 计划在 100 毫秒后由计时器解决,因此这将首先发生,您将看到结果
p1
已履行,而 p3
被拒绝(并且 p2
仍处于活动状态,因为它的定时器设置为 200ms)。
关键是承诺计时器在您创建承诺时启动,而不是稍后。