Await è un errore di parola riservata all'interno della funzione asincrona


91

Sto lottando per capire il problema con la seguente sintassi:

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

Continuo a ricevere un errore dicendo:

attendere è una parola riservata

... ma non è legale all'interno di una funzione asincrona?

Il bit di invio proviene dalla libreria react-thunk .


6
Non è all'interno di una funzione asincrona. È all'interno della funzione che inizia con (dispatch) => e non è asincrona. Perché devi sendVerificationEmailrestituire un'altra funzione invece di eseguire qualche azione?
JLRishe

3
@JLRishe in effetti deve essere async (dispatch) =>che potresti postarlo come risposta, devo restituirlo per avere accesso alla spedizione
Ilja

Risposte:


152

Per awaitpoterlo utilizzare , la funzione che lo racchiude direttamente deve essere asincrona. Secondo il tuo commento, l'aggiunta asyncalla funzione interna risolve il tuo problema, quindi lo posterò qui:

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

È possibile che si rimuova il asyncdalla funzione esterna perché non contiene alcuna operazione asincrona, ma ciò dipenderebbe dal fatto che il chiamante sendVerificationEmailsi aspetti sendVerificationEmaildi restituire una promessa o meno.


8
In effetti quell'asincronia esterna non è necessaria
Ilja

1
Ahh! Grazie! Ho avuto lo stesso problema in un forEach ... brutale :)
Nick Steele

Idem qui per l'utilizzo di await incorporato in una funzione forEach e quindi in una funzione async.
Opus1217
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.