【发布时间】:2020-03-15 22:19:27
【问题描述】:
由于 async 函数是非阻塞的,我预计下面代码中的 asyncfunc 不会阻塞并且 console.log(a) 打印为零。
var a = 0;
const asyncfunc = async () => {
for (let i = 0; i < 1000000000; i++) {}
a = 1;
return 2;
};
const asyncmain = async () => {
a = asyncfunc();
console.log(a);
return true;
};
asyncmain();
但是当我执行时,asyncfunc 中的所有代码都先运行,然后写入控制台日志。函数首先在异步函数处被阻塞!
预期:0 实际:承诺 { 2 }
我无法理解这个结果。帮助我理解这个结果!
ps 我在 node.js v10.15.3 上运行了这段代码
【问题讨论】:
-
"由于异步函数是非阻塞的' 这是不正确的。异步函数将同步运行,直到遇到
await。 -
简单地说,将 async 关键字放在函数前面只是意味着函数返回的任何值都将包装在 Promise 中。
标签: javascript asynchronous async-await nonblocking