Redux Saga 异步/等待模式

2024-01-26

我在整个代码库中使用 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(使用前将#替换为@)

Redux Saga 异步/等待模式 的相关文章

  • 即使不改变对象和数组,也无法更改减速器中的嵌套对象

    我正在尝试更新减速器内的状态 我知道我不应该改变对象或嵌套对象 所以我使用map用于数组或对象的对象扩展 但似乎我无法真正更改深层嵌套的值 除了我无法更改状态这一事实之外 我真的不喜欢代码的外观 尤其是仅更改一个属性所需执行的循环数量 我觉
  • React + Redux 和 REST API?

    我在 Node 中构建了一个简单的 CRUD 应用程序 并已在 Express 中完成了其余 API 的创建 我现在正在寻求添加前端功能 并希望使用 React Redux 作为学习练习 然而 似乎所有围绕此的教程都直接使用 Redux 访
  • 纯组件在没有变化时渲染?

    我有一个像这样的纯组件 interface Props checkBoxTitleStyle any checkBoxBackgroundColor any onPressCheckBox id isChecked selectedArra
  • ant design select占位符问题

    我在我的 React 应用程序中使用 antd design 这是我遇到问题的代码片段
  • 使用react redux获取删除请求方法不删除

    我正在尝试使用 fetch 删除请求方法来使用 React redux 删除本地主机服务器中的项目 调用方法 deleteItem e e preventDefault const id this props id this props d
  • 如何在react/redux应用程序中以jest方式访问组件的子组件

    我想在 Redux 应用程序中测试 Connect 内的组件 this component TestUtils renderIntoDocument
  • 一个组件中的多个表单无法识别表单和初始值属性(redux-form v7.0.4)

    我正在单个组件中创建多个表单 并使用我定义表单的 redux 存储来初始化它们name属性中的
  • 在 createAsyncThunk 上调度操作?

    我有一个 thunk 动作是由createAsyncThunk 我想在调用 api 更新状态之前调度一个操作 我不想使用动作getProducts pending因为我想要派遣actionLoading 对于其他 thunk 操作 我怎样才
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • 类型错误:未定义不是对象(评估“store.getState”)

    我正在关注让我们构建 使用 React Native Redux 的加密货币原生移动应用程序 https medium com react native training bitcoin ripple ethereum price chec
  • 如何编写具有依赖状态的 redux 减速器

    我正在开发一个 React Redux 应用程序 它允许将 小部件 添加到页面并在 2D 空间中进行操作 要求可以同时选择和操作多个小部件 我当前状态树的简化版本如下所示 widgets widget 1 x 100 y 200 widge
  • 如何使用 useState 挂钩按索引更新数组?

    我有一个选择组件 我想用它来根据索引更新对象数组的值 我这样使用钩子 const areas setAreas useState product areas 这将返回以下 区域 0 de Getraenke en Drinks 1 de S
  • 如何检查令牌过期和注销用户?

    当用户单击注销按钮时 他 她可以自己注销 但是如果令牌过期 他 她就无法注销 因为在我的应用程序中 令牌在服务器端和前端都使用 当用户单击注销按钮时 如果令牌有效 则服务器和浏览器中的令牌都会被清除 当用户未注销并且他 她的令牌过期但未在浏
  • 如何实现rtk的createApi查询去抖

    有人可以帮助我使用 creatApi 和 redux 工具包中的查询实现来实现去抖功能 提前致谢 我个人在 RTK 查询中没有发现任何开箱即用的去抖动实现 但你可以自己实现 定义一个api 我正在使用 openlibrary 的一个 imp
  • 使用 ngrx 时调度完成后执行代码

    在我的示例 Angular 2 应用程序中 我使用 ngrx store 和 ngrx effects 进行状态管理 下面是组件中添加新项目的函数之一 addAuthor this store dispatch addAuthorActio
  • 如何将 props 传递给模态

    我有一个购物应用程序 我可以在其中映射一些产品并将它们呈现在屏幕上 用户可以增加 减少数量 当数量达到 1 并且用户点击减少时 一些中间件会介入并询问他们是否确定要将其从购物篮中删除 如果他们单击 否 则会关闭模式并将其留在购物篮中 如果他
  • Redux - 异步加载初始状态

    我正在尝试找出最简洁的方法来加载来自 API 调用的 Redux 存储的初始状态 据我所知 提供初始状态的典型方法是在页面加载时在服务器端生成它 并将其作为简单对象提供给 Redux createStore 但是 我正在编写一个应用程序 计
  • React 键“mods”的切片缩减器在初始化期间返回未定义。 (还原)

    减速器 index js import combineReducers from redux import mods from mods js export default combineReducers lt error comes fr
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • Redux 状态 - 最大推荐大小

    我正在构建一个项目管理应用程序 但我仍然在努力解决一个问题 在 Redux 状态中存储什么以及 按需 加载什么 Redux 状态是否有已知的 最大推荐大小 几十千字节 几百千字节 兆字节单位 请记住 归根结底 Redux 只是 如何 将信息

随机推荐

  • 如何整合我的 Xcode 项目文件?

    当我开始开发我的第一个应用程序时 我假设将文件拖到 xcode 中会将它们放入我的项目的实际目录中 并非如此 显然 Xcode 在桌面上引用了它们 有没有一种简单的方法将所有引用的文件复制到项目目录中 我的桌面很乱 使用 Finder 将所
  • Symfony2 - 以编程方式设置记住我 cookie

    我通过新的 simple form 功能实现了自定义身份验证器 main pattern simple form authenticator custom authenticator provider fos userbundle csrf
  • 调试 ASP.NET 会话状态服务器问题

    我们有一个在负载平衡服务器实例上运行的应用程序 因此配置为使用 ASP NET 会话状态服务 该服务在我们的一台数据库服务器上运行 虽然我们应用程序的两个实例都可以成功连接到状态服务器 但会话状态数据的更改并未在它们之间反映出来 FI 如果
  • 为什么原型未定义

    我知道这个问题已经被问过数百次了 但是 我似乎无法理解这个概念prototype 这是我的示例脚本 var config writable true enumerable true configurable true var defineP
  • 更改 Shapefile 的投影

    我正在尝试更改或分配德国形状文件的投影NA to proj longlat datum WGS84 no defs ellps WGS84 towgs84 0 0 0 但不知何故效果不佳 可重现的示例 可以下载Shapefile和其他文件h
  • Cmake:基于变量内容的 add_custom_command 参数

    我想要一个 Cmake 函数来将一些二进制文件复制到特定位置 为此 我有以下函数定义 function collect binaries TARGET NAME DEST DIR set targetsToCopy ARGN set cop
  • 如何使用 Jasmine 模拟另一个模块中所需的模块

    const Client require src http client module exports handler gt const client new Client const locationId client getLocati
  • 用于测试分布式系统的集成测试框架?

    我有一个分布式系统 其组件分布在多个盒子中 他们使用 TCP 或多播相互通信 每个组件相互交换消息 这些基本上是序列化的数据结构 我们有哪些集成测试框架来测试此类系统 我熟悉红宝石 所以基于红宝石的东西肯定会有所帮助 我想有不同的方法可以做
  • 两个变量相减

    我正在使用 Jasper 报告设计我的报告 我有一份收入支出报告 其中我使用变量获得总收入TOT INCOME和使用第二个变量的总费用 TOT EXPENSES 我需要减去两个变量才能得到净利润 所以我创建了第三个变量TOT PROFIT
  • Cordova/Phonegap:WP8.1 导航栏重叠

    我的 cordova 应用程序是为 WP 8 0 Target 构建的 当在没有硬件按钮但有可切换导航栏的 WP8 1 设备上运行它时 HTML 内容会被导航栏重叠 隐藏导航栏时 导航栏的黑色背景将保留并仍然与 HTML 重叠 还可以滚动整
  • 如何在保存打印页面时为文件创建自定义文件名?

    在这里 我通过 window print 事件打印页面 在打印之前 我需要保存此页面 因为我需要在此事件中硬核文件名 a href img class noPrint src Images Print icon png border 0 a
  • 从测试台访问 uvm_config_db 的最佳方式?

    我想在我的顶级测试平台中创建一个时钟 其周期可以通过测试进行控制 我所做的是将周期设置到 uvm config db 中并将其返回到测试台中 我必须输入 1 以确保构建阶段已完成 否则 get 返回错误值 module testbench
  • CakePHP 连接在浏览器中被拒绝

    我正在第一次设置 学习 CakePHP 我正在努力弄清楚为什么我无法通过默认端口 8765 访问我的服务器 我喜欢在 ubuntu 机器上进行开发并远程处理代码 该服务器托管在我本地计算机上的虚拟机上 但我将其称为远程计算机 服务器和我的远
  • lua 垃圾收集器调试输出的最佳方法是什么?

    我需要一个游戏状态对象在 lua 中 不是 C 或与 C 绑定 管理来自我的 C 引擎的灯光 相机 对象 事件 lua 对象是与 c 不同的实体 几乎只是标准的 lua 表 我担心 GC 将如何删除这些对象 因为它们将被动态创建和删除 打开
  • 从真值表创建降序二元决策图 (ROBDD)

    是否有一个软件包 最好是应用程序 而不是库 可以根据给定的真值表 以某种文本格式 创建降序二元决策图 ROBDD 你也可以尝试这个 http formal cs utah edu 8080 pbl BDD php http formal c
  • Pygal 子图(几张图)

    我想在 python 2 7 上使用 Pygal 创建一个仪表板 同一窗口中的多个图 但后者没有 subplot 功能 有没有不使用散景或情节的解决方案 Matplotlib 上的示例 fig axes plt subplots ncols
  • 无法找到此循环的大 O 时间

    我正在尝试查找以下代码片段的 Big O 运行时间 for i 0 i lt n n i for j 0 j lt i j k 我不确定由于 n 的乘法 它是否会是 O n 3 或者只是 O n 2 一些帮助将不胜感激 内部循环将执行 0
  • 使用 AudioKit for iOS < 11 进行离线音频渲染

    我有 4 个AKPlayer节点 每个节点都连接到一些效果 最后它们混合在一起 我想离线渲染 iOS gt 9 0 的输出 但我不知道如何做 编辑 我已经实现了渲染并将其分离为 iOS gt 11 虽然 iOS gt 11 renderTo
  • 无法读取 null 的属性“getHostNode”

    我有一个带有 React 路由器的 Horizo n React 应用程序 并且我的应用程序中有一个简单的按钮 Another Search 当我点击它时 出现以下异常 Uncaught TypeError Cannot read prop
  • Redux Saga 异步/等待模式

    我在整个代码库中使用 async await 因此 我的 api 调用是由异步函数定义的 async function apiFetchFoo return await apiCall 我想从我的传奇代码中调用这个函数 看来我不能这样做 D