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 .

Ilja
la source
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.

JLRishe
la source
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