我在我的代码库中使用async/await。因此,我的API调用是由异步函数定义的。
async function apiFetchFoo {
return await apiCall(...);
}
我希望能够从我的saga代码中调用此函数。看起来我无法这样做:
// Doesn't work
function* fetchFoo(action) {
const results = await apiFetchFoo();
yield put({type: "FOOS_FETCHED_SUCCESSFULLY", foos: results});
}
然而,这确实有效,并符合redux saga文档的要求:
// Does work
function* fetchFoo(action) {
const results = yield call(apiFetchFoo);
yield put({type: "FOOS_FETCHED_SUCCESSFULLY", foos: results});
}
这是在使用Redux Saga和async/await时的正确方式吗?在saga代码中使用生成器语法是标准的做法,而在其他地方使用async/await模式吗?
function *() { ... await }
而不是async function () { .. await ...}
?我相当确定如果你没有使用async而使用await,会导致一个错误:"await是JavaScript保留关键字"。 - ArchNoobasync function* fetchFoo(action: requestAction): AsyncGenerator {
,则需要将"es2018.asynciterable"
包含在tsconfig的compilerOptions.lib
数组中(如果尚未包含)。此外,我需要TypeScript 3.7(从3.0开始)。 - Derk Jan Speelman