Await est une erreur de mot réservé dans la fonction async


89

J'ai du mal à résoudre le problème avec la syntaxe suivante:

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

Je reçois une erreur en disant:

attendre est un mot réservé

... mais n'est-ce pas légal dans une fonction asynchrone?

Le bit d'expédition provient du bibliothèque react-thunk .


6
Ce n'est pas à l'intérieur d'une fonction asynchrone. C'est à l'intérieur de la fonction qui commence par (dispatch) => , et ce n'est pas asynchrone. Pourquoi avez-vous le sendVerificationEmailrenvoi d'une autre fonction au lieu d'effectuer une action?
JLRishe

3
@JLRishe en effet, il faut que async (dispatch) =>vous puissiez poster cela comme réponse, je dois le renvoyer afin d'avoir accès à la répartition
Ilja

Réponses:


148

Pour pouvoir être utilisé await, la fonction qui l'entoure directement doit être asynchrone. Selon votre commentaire, l'ajout asyncde la fonction interne résout votre problème, je le posterai donc ici:

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

Vous pouvez éventuellement supprimer le asyncde la fonction externe car il ne contient aucune opération asynchrone, mais cela dépendra du fait que l'appelant de cela sendVerificationEmails'attend sendVerificationEmailà renvoyer une promesse ou non.


8
En effet, l'asynchrone externe n'est pas nécessaire
Ilja

1
Ahh! Merci! J'ai eu le même problème à l'intérieur d'un forEach ... brutal :)
Nick Steele

Idem ici pour utiliser await intégré dans un forEach puis dans une fonction async.
Opus1217
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.