web-dev-qa-db-fra.com

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

J'ai du mal à comprendre 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 continue à avoir des erreurs en disant:

attendre est un mot réservé

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

Le bit d'envoi provient de la bibliothèque react-thunk .

71
Ilja

Pour utiliser await, la fonction qui la contient doit être asynchrone. Selon votre commentaire, l'ajout de async à la fonction interne corrige votre problème. Je vais donc le publier 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 la async de la fonction externe car elle ne contient aucune opération asynchrone, mais cela dépend si l'appelant de cette sendVerificationEmail attend que sendVerificationEmail renvoie une promesse. ou pas.

124
JLRishe