Await adalah kesalahan kata yang dipesan di dalam fungsi async


91

Saya berjuang untuk mencari tahu masalah dengan sintaks berikut:

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

Saya terus mendapatkan kesalahan yang mengatakan:

menunggu adalah kata yang dipesan

... tapi bukankah legal dalam fungsi async?

Bit pengiriman berasal dari perpustakaan react-thunk .


6
Ini tidak ada di dalam fungsi async. Itu ada di dalam fungsi yang dimulai dengan (dispatch) => , dan itu bukan asinkron. Mengapa Anda sendVerificationEmailmengembalikan fungsi lain daripada melakukan beberapa tindakan?
JLRishe

3
@JLRishe memang perlu async (dispatch) =>Anda dapat memposting itu sebagai jawaban, saya perlu mengembalikannya untuk mendapatkan akses ke pengiriman
Ilja

Jawaban:


152

Untuk menggunakan await, fungsi yang secara langsung melingkupinya harus asinkron. Menurut komentar Anda, menambahkan asyncke fungsi bagian dalam memperbaiki masalah Anda, jadi saya akan mempostingnya di sini:

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

Mungkin, Anda bisa menghapus fungsi asyncdari luar karena tidak berisi operasi asinkron apa pun, tetapi itu akan bergantung pada apakah pemanggilnya sendVerificationEmailmengharapkan sendVerificationEmailuntuk mengembalikan sebuah janji atau tidak.


8
Memang asinkron luar itu tidak diperlukan
Ilja

1
Ahh! Terima kasih! Saya memiliki masalah yang sama di dalam forEach ... brutal :)
Nick Steele

Lakukan di sini untuk menggunakan await yang disematkan di forEach dan kemudian dalam fungsi async.
Opus1217
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.