функция async / await nodejs - PullRequest
       1

функция async / await nodejs

0 голосов
/ 22 ноября 2018

У меня следующий фрагмент кода с async/await.

async function test1 () {
  setTimeout(() => {
    console.log("1")
  }, 2000);
}

async function test2 () {
  setTimeout(() => {
    console.log("2")
  }, 1000);
}

async function test3 () {
  setTimeout(() => {
    console.log("3")
  }, 1500);
}

async function test4 () {console.log("4")}

async function run () {
  await test1()
  await test2()
  await test3()
  await test4()
}

run()

Когда я изучу приведенный выше фрагмент кода, я ожидаю вывод в виде 1, 2, 3, 4. Но я получил 4, 2, 31. Я что-то здесь пропустил?

Версия узла v10.13.0

1 Ответ

0 голосов
/ 22 ноября 2018

await ing test1 и т. Д. Аналогично await ing setTimeout(...) напрямую.setTimeout не основано на обещаниях и не учитывается в цепочке обещаний.

await test1() и т. Д. Приводят к задержкам в один тик, run() обещание разрешается мгновенно.

Чтобы код работал так, как задумано, оно должно быть:

function test1 () {
  return new Promise(resolve => setTimeout(() => {
    console.log("1");
    resolve();
  }, 2000));
}

test1 и т. Д. Не обязательно должно быть async, поскольку они не могут воспользоваться обещанием, созданным async функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...