Awaitは、非同期関数内の予約語エラーです


88

私は次の構文で問題を理解するのに苦労しています:

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

私は次のようにエラーを受け取り続けます:

awaitは予約語です

...しかし、非同期関数内では合法ではありませんか?

ディスパッチビットはreact-thunkライブラリから来ています。


6
非同期関数の内部ではありません。これは、で始まる関数内にあり、(dispatch) => 非同期ではありません。sendVerificationEmail何らかのアクションを実行する代わりに、なぜ別の関数を返す必要があるのですか?
JLRishe 2017

3
@JLRishe確かにasync (dispatch) =>、回答として投稿できる必要があります。ディスパッチにアクセスするには、返信する必要があります
Ilja 2017

回答:


147

を使用するにはawait、それを直接囲む関数が非同期である必要があります。あなたのコメントによるとasync、内部関数に追加すると問題が修正されるので、ここに投稿します:

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

async非同期操作が含まれていないため、外部関数からを削除できる可能性がありますが、それは、その呼び出し元がpromiseを返すことsendVerificationEmailを期待しsendVerificationEmailているかどうかによって異なります。


8
確かに、外部非同期は必要ありません
Ilja 2017

1
ああ!ありがとうございました!:)私はforEachの内部で同じ問題を抱えていた...残忍な
ニック・スティール

forEachに埋め込まれ、次にasync関数に埋め込まれたawaitを使用するための同上。
Opus1217
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.