【问题标题】:Await is a reserved word error inside async functionAwait 是异步函数中的保留字错误
【发布时间】:2017-07-07 01:52:17
【问题描述】:

我正在努力用以下语法找出问题:

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 库。

【问题讨论】:

  • 它不在异步函数中。它在以(dispatch) => 开头的函数内部,这不是异步的。为什么sendVerificationEmail 返回另一个函数而不是执行某些操作?
  • @JLRishe 确实需要是 async (dispatch) => 你可以将其作为答案发布,我需要将其退回才能访问调度

标签: javascript reactjs async-await redux


【解决方案1】:

为了使用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 返回一个承诺。

【讨论】:

  • 确实不需要外部异步
  • 啊!谢谢!我在 forEach 中遇到了同样的问题......残酷:)
  • 同上在这里使用嵌入 forEach 然后在异步函数中的等待。
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 2019-03-05
  • 2019-03-28
  • 2020-10-03
  • 2017-12-08
  • 2021-06-26
相关资源
最近更新 更多