我在整个代码库中使用 async/await 。因此,我的 api 调用是由异步函数定义的
async function apiFetchFoo {
return await apiCall(...);
}
我想从我的传奇代码中调用这个函数。看来我不能这样做:
// 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 模式是标准的吗?
是的,这是使用 Redux-Saga 的标准方法。
你永远不应该打电话给await
函数直接在 saga-generator 内部,因为 redux-saga 是为了编排副作用。因此,任何时候你想要运行副作用时,都应该通过以下方式产生副作用:redux-saga
效果(通常:call
or fork
)。如果您直接执行此操作而不通过redux-saga
的效果,那么redux-saga
将无法协调副作用。
如果您考虑一下,redux-saga 生成器是完全可测试的,无需模拟任何内容。此外,它有助于保持事物的解耦:如果你apiFetchFoo
返回一个承诺,传奇仍然会一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)