提问人:Aminarune 提问时间:10/1/2023 更新时间:10/1/2023 访问量:44
等待promise setTimout工作不对?[复制]
Await promise setTimout is working wrong? [duplicate]
问:
该函数假设在 6 秒后结束,但在运行时只花了 4 秒main
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("promise1");
resolve("promise1");
}, 4000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("promise2");
resolve("promise2");
}, 2000);
});
async function main() {
const result1 = await promise1;
const result2 = await promise2;
console.log("end");
}
main();
当我查看终端时,我注意到输出然后.代码是否应该先运行 promise 1 然后运行 promise 2?promise2
promise1
你能帮忙解释一下为什么,在这种情况下有什么方法可以等待应许吗?
答:
4赞
Quentin
10/1/2023
#1
将立即调用传递给的函数。它不是由 触发的。new Promise
await
关键字只是暂停函数,直到解析其 RHS 上的 promise。await
main
- 您创建了第一个承诺
- 您创建了第二个应许
- 你调用
main
main
被暂停,直到解决promise1
- 两秒钟后解决
promise2
- 两秒钟后解决
promise1
main
醒来main
被挂起,直到在步骤 5 中已经发生解决,因此它会立即再次唤醒promise2
如果你想避免调用你传递给第二个的函数,直到第一个 promise 解析,那么把它放在一个函数中,从你想调用它的时候可以调用它。setTimeout
main
const func1 = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log("promise1");
resolve("promise1");
}, 4000);
});
const func2 = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log("promise2");
resolve("promise2");
}, 2000);
});
async function main() {
const result1 = await func1();
const result2 = await func2();
console.log("end");
}
main();
评论