【发布时间】:2021-05-02 17:42:38
【问题描述】:
console.log("1");
console.log("2");
async function a() {
for (let i = 0; i < 1000000000; i++) {}
for (let i = 0; i < 1000000000; i++) {}
}
a().then(() => console.log("in then"));
console.log("3!");
我想要的这个输出就是这个 1 2 3! 那时
但是 async 函数的行为是同步的,不会让 3!打印直到长循环执行完毕。我想如果使用 async 关键字,它会在后台运行里面的函数吗? 我基本上希望 2 个长循环在后台运行。只是想了解异步和等待。 谢谢。
编辑: 有人可以告诉我为什么这也可以同步工作吗??
console.log("2");
function lag(resolve) {
for (let i = 0; i < 1000000000; i++) {}
for (let i = 0; i < 1000000000; i++) {}
console.log("in lag");
return resolve;
}
async function a() {
// console.log("its done");
let a = await new Promise((resolve, reject) => lag(resolve));
}
a().then(() => console.log("in then"));
console.log("3!"); ```
【问题讨论】:
-
for是完全同步的。您正在执行一个 CPU 密集型操作,其中没有任何异步操作。去掉async关键字,完全没用。 -
"认为如果使用 async 关键字,它会在后台运行内部函数?" 不,这不是真的,而且从来没有这样工作过。
async不会产生新进程。它只允许你在正文中使用await,然后返回一个promise。它确实会自动处理 Promise 排序,但它仍然是单线程。