JavaScript Asyn c функция не блокируется - PullRequest
1 голос
/ 15 марта 2020

Поскольку функция asyn c неблокирующая, я ожидал, что asyncfun c в приведенном ниже коде не блокирует и 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();

Но когда я выполнил, сначала запускается весь код в asyncfun c, а затем записывается консольный журнал. функция заблокирована при асинхронной c функция сначала!

ожидается: 0 актуально: Обещание {2}

Я не могу понять этот результат. Помоги мне понять этот результат!

ps Я запустил этот код на node.js v10.15.3

1 Ответ

0 голосов
/ 15 марта 2020

Если вы хотите использовать результаты асинхронной функции, вы должны указать, что хотите дождаться их использования, используя предложение 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();

Я рекомендую вам прочитать эту статью , чтобы полностью понять поведение асинхронных функций.

...