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

10-06 12:31