Await - ошибка зарезервированного слова внутри асинхронной функции

89

Я изо всех сил пытаюсь решить проблему со следующим синтаксисом:

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);
    }
  };

Я все время получаю сообщение об ошибке:

ожидание - зарезервированное слово

... но разве это не законно в асинхронной функции?

Бит отправки поступает из библиотеки response-thunk .

Илья
источник
6
Это не внутри асинхронной функции. Он находится внутри функции, которая начинается с (dispatch) => , и это не асинхронно. Почему у вас есть sendVerificationEmailвозврат другой функции вместо выполнения какого-либо действия?
JLRishe
3
@JLRishe, действительно, это должно быть, чтобы async (dispatch) =>вы могли опубликовать это в качестве ответа, мне нужно вернуть его, чтобы получить доступ к отправке,
Илья

Ответы:

148

Для использования 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объект вернуть обещание или нет.

JLRishe
источник
8
На самом деле этот внешний асинхронный
Илья
1
Ах! Спасибо! У меня была такая же проблема внутри forEach ... жестокая :)
Ник Стил
То же касается использования await, встроенного в forEach, а затем в асинхронную функцию.
Opus1217,