Async vs затем в Promise разрешить - PullRequest
0 голосов
/ 14 февраля 2019

В следующем коде я использую Promise с .then(), но он не ждет setTimeout(), как я ожидал.

Почему async / await подождите setTimeout() хотя?Похоже, await ожидает разрешения Promise, но .then() - нет.Может кто-нибудь сообщить какие-нибудь подробности?

function hello() {
  console.log('hello');
}

function myPromiseFunction() {
  return new Promise((resolve, reject) => {
    setTimeout(function() {
      console.log('hey');
      resolve();
    }, 2000);
  });
}

myPromiseFunction().then(hello());  // Prints 'hello' then 'hey'

async function myAsyncFunction() {
  await myPromiseFunction();
  hello();
}

myAsyncFunction();  // Prints 'hey' then 'hello'

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Попробуйте

myPromiseFunction().then(()=>hello())

Вы вызываете функцию, а не предоставляете функцию для вызова.

0 голосов
/ 14 февраля 2019

Вы вызываете hello с помощью ()

.then(hello());

hello вызывается и возвращает void, затем вы передаете void в then в качестве функции обратного вызова.

0 голосов
/ 14 февраля 2019

myPromiseFunction().then(hello()) использует результат вызова hello() в качестве обратного вызова для .then().Если вы хотите использовать hello() в качестве самой функции обратного вызова, используйте любой из этих синтаксисов:

myPromiseFunction().then(() => hello());
myPromiseFunction().then(hello);

Обратите внимание, что второй синтаксис молча передает параметр в hello() - значение, разрешенное с помощьюPromise.В вашем примере это не проблема (так как hello() вообще не проверяет использование своих аргументов), но это может быть причиной недочетов.

...