Await es un error de palabra reservada dentro de la función asincrónica

89

Estoy luchando por resolver el problema con la siguiente sintaxis:

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

Sigo recibiendo un error que dice:

esperar es una palabra reservada

... pero ¿no es legal dentro de una función asincrónica?

El bit de envío proviene de la biblioteca react-thunk .

Ilja
fuente
6
No está dentro de una función asincrónica. Está dentro de la función que comienza con (dispatch) => , y eso no es asincrónico. ¿Por qué tienes la sendVerificationEmaildevolución de otra función en lugar de realizar alguna acción?
JLRishe
3
@JLRishe, de hecho, debe ser async (dispatch) =>que pueda publicar eso como respuesta, necesito devolverlo para obtener acceso al envío
Ilja

Respuestas:

148

Para usarlo await, la función que lo encierra directamente debe ser asíncrona. De acuerdo con su comentario, agregar asynca la función interna soluciona su problema, así que lo publicaré aquí:

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

Posiblemente, podría eliminar el asyncde la función externa porque no contiene ninguna operación asincrónica, pero eso dependería de si la persona que sendVerificationEmailllama espera sendVerificationEmaildevolver una promesa o no.

JLRishe
fuente
8
De hecho, esa asincrona externa no es necesaria
Ilja
1
¡Ahh! ¡Gracias! Tuve el mismo problema dentro de un forEach ... brutal :)
Nick Steele
Lo mismo ocurre aquí para usar await incrustado en un forEach y luego en una función asíncrona.
Opus1217