Ilj*_*lja 75 javascript async-await reactjs redux
我正在努力通过以下语法找出问题:
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);
}
};
Run Code Online (Sandbox Code Playgroud)
我一直收到错误说:
等待是一个保留字
...但是在异步函数中是不合法的?
调度位来自react-thunk库.
JLR*_*she 130
为了使用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);
}
};
Run Code Online (Sandbox Code Playgroud)
可能,你可以async从外部函数中删除它,因为它不包含任何异步操作,但这取决于它的调用者是否sendVerificationEmail期望sendVerificationEmail返回一个promise.
await直接在您正在使用的范围内使用async并删除顶部范围,async因为它是多余的。
正确的写法是:
const sendVerificationEmail = () =>
async (dispatch) => {
await Auth.sendEmailVerification();
// some code..
};
Run Code Online (Sandbox Code Playgroud)
您遇到了错误,因为您在范围内直接使用了await没有 the 的关键字,那里有 2 个函数,一个在另一个函数内,您在顶部的函数上有,但在内部的函数上没有,这很重要。asyncawaitasync
错误的方法:
const sendVerificationEmail = async () =>
// notice that an async before the (dispatch) is missing
(dispatch) => {
await Auth.sendEmailVerification();
// some code..
};
Run Code Online (Sandbox Code Playgroud)
由此,将生成一个错误(Chrome 提供的最新错误):
Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules
Async Functions异步函数是使用 async 关键字声明的函数,并且其中允许使用await 关键字。async 和await 关键字使得能够以更简洁的风格编写基于promise 的异步行为,从而避免了显式配置promise 链的需要。
| 归档时间: |
|
| 查看次数: |
65628 次 |
| 最近记录: |