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.