由于异步功能是非阻塞的,所以我期望下面的代码中的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,以充分了解异步函数的行为。