等待是异步函数内部的保留字错误


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

我不断收到错误消息:

等待是保留字

...但是在异步函数中不合法吗?

调度位来自react-thunk库。


6
它不在异步函数中。它位于以开头的函数内部(dispatch) => ,并且不是异步的。为什么要sendVerificationEmail返回另一个函数而不执行某些动作?
JLRishe '17

3
@JLRishe确实的确需要async (dispatch) =>您将其发布为答案,我需要将其退回以便访问调度
Ilja

Answers:


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从外部函数中删除,因为它不包含任何异步操作,但这取决于该调用者是否sendVerificationEmail期望sendVerificationEmail返回诺言。


8
实际上,不需要外部异步
Ilja

1
啊!谢谢!我在forEach中遇到了同样的问题……残酷:)
尼克·斯蒂尔

这里也使用了嵌入在forEach中然后在异步函数中的await。
Opus1217
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.