await не ждет завершения функции - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в javascript, и я попытался реализовать свое первое ожидание асинхронности и не могу понять, где моя проблема.

getName () - должен вернуть обещание через 1 с.f () - должен дождаться окончания getName и затем напечатать имя

Что мне не хватает?

const getName = async () => {
  setTimeout(() => 'xxx', 1000)
};

const f = async () => {
  name = await getName()
  console.log(name)
}

f()

Ответы [ 2 ]

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

Если вы не используете await также внутри getName, вам не нужно иметь getName асинхронность, вам просто нужно вернуть Promiseawait работает с обещаниями:

const getName = () => 
  new Promise(resolve => setTimeout(resolve, 1000, 'xxx'));

async f() {
  let name = await getName();
  console.log(name);
}

f();
0 голосов
/ 08 февраля 2019

Для ожидания функции эта функция должна возвращать обещание.

Таким образом, вам необходимо создать новое обещание.Он будет иметь 2 метода: resolve и reject.

  1. resolve возвращает переменную и используется в случае успеха.Вы можете перехватить его возвращаемое значение, используя promise.then(value => ) или await, используя его.
  2. reject выдает ошибку и используется при ошибке.Вы можете поймать ошибку, используя promise.catch(err => ) или ожидая асинхронную функцию и поместив ее в блок try-catch.

Вот как должен выглядеть ваш код:

const getName = async () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('xxx');
    }, 1000)
  })
};

const f = async () => {
  name = await getName()
  console.log(name)
}

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