Как вызвать функцию асинхронной стрелки с помощью await - PullRequest
0 голосов
/ 29 октября 2018

Если я определю функцию следующим образом:

const getName = async () => await Promise.resolve('John');

Когда я пытаюсь вызвать функцию getName с помощью async:

const name = await getName();
console.log(`Hi ${name}`);

Выдает ошибку:

const name = await getName();
             ^^^^^

SyntaxError: await is only valid in async function

Что я делаю не так?

1 Ответ

0 голосов
/ 29 октября 2018
const getName = async () => await Promise.resolve('John');

В приведенном выше, у вас есть асинхронная функция (функция стрелки), которая использует await внутри.

Это нормально (хотя и бессмысленно, поскольку вы могли бы вернуть обещание напрямую).

Здесь:

const name = await getName();

Вы снова используете await, и хотя функция справа возвращает обещание, функция, внутри которой она появляется, не async, поэтому она недопустима.


Поместите его в асинхронную функцию, и все будет хорошо:

const getName = async() => await Promise.resolve('John');

const init = async() => {
  const name = await getName();
  console.log(`Hi ${name}`);
};

init();

Как уже упоминалось, создание getName async и await внутри - просто ненужно сложный набор вложенных обещаний, и вы можете упростить:

const getName = () => Promise.resolve('John');

const init = async() => {
  const name = await getName();
  console.log(`Hi ${name}`);
};

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