由于异步功能是非阻塞的,所以我期望下面的代码中的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
子句指定要等待它们使用它。
var a = 0;
const asyncfunc = async () => {
for (let i = 0; i < 1000000000; i++) {}
a = 1;
return 2;
};
const asyncmain = async () => {
a = await asyncfunc();
console.log(a);
return true;
};
asyncmain();
我建议您阅读此article以完全了解异步函数的行为。