Await là một lỗi từ dành riêng bên trong hàm async


88

Tôi đang đấu tranh để tìm ra vấn đề với cú pháp sau:

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

Tôi liên tục gặp lỗi khi nói:

chờ đợi là một từ dành riêng

... nhưng nó không hợp pháp trong một hàm không đồng bộ?

Bit điều phối đến từ thư viện react-thunk .


6
Nó không nằm trong một hàm không đồng bộ. Nó nằm bên trong hàm bắt đầu bằng (dispatch) => , và đó không phải là hàm không đồng bộ. Tại sao bạn sendVerificationEmaillại trả về một hàm khác thay vì thực hiện một số hành động?
JLRishe 17/02/17

3
@JLRishe thực sự nó cần phải được async (dispatch) =>bạn có thể đăng bài mà như một câu trả lời, tôi cần phải trả lại nó để có được quyền truy cập vào công văn
Ilja

Câu trả lời:


147

Để sử dụng await, hàm trực tiếp bao quanh nó cần phải không đồng bộ. Theo nhận xét của bạn, việc thêm asyncvào hàm bên trong sẽ khắc phục sự cố của bạn, vì vậy tôi sẽ đăng nội dung đó ở đây:

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

Có thể, bạn có thể xóa asynckhỏi hàm bên ngoài bởi vì nó không chứa bất kỳ hoạt động không đồng bộ nào, nhưng điều đó sẽ phụ thuộc vào việc liệu người gọi hàm đó sendVerificationEmailcó mong đợi sendVerificationEmailtrả về một lời hứa hay không.


8
Quả thực rằng không cần đồng bộ bên ngoài là không cần thiết
Ilja

1
Ahh! Cảm ơn bạn! Tôi đã cùng một vấn đề bên trong một foreach ... tàn bạo :)
Nick Steele

Ditto ở đây để sử dụng await được nhúng trong forEach và sau đó trong hàm không đồng bộ.
Opus1217
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.