JavaScript异步功能不会被阻止

问题描述 投票:1回答:1

由于异步功能是非阻塞的,所以我期望下面的代码中的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上运行了此代码

javascript asynchronous async-await nonblocking
1个回答
0
投票

如果要使用异步函数的结果,则必须使用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以完全了解异步函数的行为。

© www.soinside.com 2019 - 2024. All rights reserved.