gpt4 book ai didi

Redux Saga 异步/等待模式

转载 作者:行者123 更新时间:2023-12-03 08:41:13 27 4
gpt4 key购买 nike

我在整个代码库中使用 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 产生副作用来做到这一点。效果(通常: callfork )。如果您直接执行此操作而不通过 redux-saga效果,那么 redux-saga将无法协调副作用。

如果您考虑一下,redux-saga 生成器是完全可测试的,无需模拟任何东西。此外,它有助于保持解耦:如果您的 apiFetchFoo返回了一个 promise ,传奇仍然会继续工作。

关于Redux Saga 异步/等待模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com