为什么不在最低级别等待时主线程被保留?
Why is the main thread being held when not awaiting at lowest level?
我是异步新手 javascript,需要一些说明。
所以我有以下代码:
async function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
while (true) {
await delay(2000);
}
}
main()
console.log(`Hi!`);
这按预期工作,主线程没有被 promise 占用,因此“嗨!”被记录。但是,在注释掉第 7 行 (await delay(2000);
) 时,“嗨!”根本没有记录。为什么会这样?
解决方案 1
您可以在登录前使用 .then()
等待承诺。
async function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
await delay(2000);
}
main().then(x => console.log(`Hi! I'm delayed by 2 seconds!`));
解决方案 2
在 main()
函数中记录。
async function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
await delay(2000);
console.log(`Hi! I'm delayed by 2 seconds!`);
}
main();
但无论哪种方式,您都必须删除 while 循环。
我是异步新手 javascript,需要一些说明。 所以我有以下代码:
async function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
while (true) {
await delay(2000);
}
}
main()
console.log(`Hi!`);
这按预期工作,主线程没有被 promise 占用,因此“嗨!”被记录。但是,在注释掉第 7 行 (await delay(2000);
) 时,“嗨!”根本没有记录。为什么会这样?
解决方案 1
您可以在登录前使用 .then()
等待承诺。
async function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
await delay(2000);
}
main().then(x => console.log(`Hi! I'm delayed by 2 seconds!`));
解决方案 2
在 main()
函数中记录。
async function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
await delay(2000);
console.log(`Hi! I'm delayed by 2 seconds!`);
}
main();
但无论哪种方式,您都必须删除 while 循环。