Await - помилка зарезервованого слова всередині функції асинхронізації


90

Я намагаюся з’ясувати проблему з таким синтаксисом:

export const sendVerificationEmail = async () =>
  (dispatch) => {
    try {
      dispatch({ type: EMAIL_FETCHING, payload: true });
      await Auth.sendEmailVerification();
      dispatch({ type: EMAIL_FETCHING, payload: false }))
    } catch (error) {
      dispatch({ type: EMAIL_FETCHING, payload: false });
      throw new Error(error);
    }
  };

Я постійно отримую повідомлення про помилку:

await - це зарезервоване слово

... але хіба це не законно в рамках функції асинхронізації?

Диспетчерський біт надходить із бібліотеки response-thunk .


6
Це не всередині функції асинхронізації. Це всередині функції, яка починається з (dispatch) => , і це не є асинхронізацією. Чому у вас є sendVerificationEmailповернення іншої функції замість виконання якоїсь дії?
JLRishe

3
@JLRishe дійсно це повинно бути, async (dispatch) =>ви могли б опублікувати це як відповідь, мені потрібно повернути його, щоб отримати доступ до відправки
Ілля

Відповіді:


150

Для використання await, функція, яка безпосередньо вмикає її, повинна бути асинхронною. Згідно з вашим коментарем, додавання asyncдо внутрішньої функції виправляє вашу проблему, тому я опублікую це тут:

export const sendVerificationEmail = async () =>
  async (dispatch) => {
    try {
      dispatch({ type: EMAIL_FETCHING, payload: true });
      await Auth.sendEmailVerification();
      dispatch({ type: EMAIL_FETCHING, payload: false }))
    } catch (error) {
      dispatch({ type: EMAIL_FETCHING, payload: false });
      throw new Error(error);
    }
  };

Можливо, ви можете видалити asyncіз зовнішньої функції, оскільки вона не містить жодних асинхронних операцій, але це залежатиме від того, чи sendVerificationEmailочікує виклик того, хто sendVerificationEmailповертає обіцянку, чи ні.


8
Справді, зовнішня асинхронізація не потрібна
Ілля

1
Ага! Дякую! У мене була така сама проблема всередині forEach ... жорстокої :)
Нік Стіл,

Так само для використання await, вбудованого у forEach, а потім у функцію асинхронізації.
Opus1217
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.