使用 Redux Observable 等待操作序列

2024-04-05

我有一个用例,在使用 Redux Observables 调度另一个操作之前,我需要等待一系列操作。我见过一些类似的问题,但我无法理解如何在给定的用例中使用这些方法。

本质上我想做这样的事情:

action$
  .ofType(PAGINATION_CLICKED) // This action occurred.
  .ofType(FETCH_SUCCESS) // Then this action occurred after.
  .map(() => analyticsAction()); // Dispatch analytics.

如果有其他类型的操作,我还想取消并重新开始该序列FETCH_ERROR例如火灾。


很好的问题。重要的一点是action$是调度所有操作时的热/多播流(它是一个主题)。由于天气很热,我们可以多次组合它,他们都会听到相同的动作流。

// uses switchMap so if another PAGINATION_CLICKED comes in
// before FETCH_SUCCESS we start over

action$
  .ofType(PAGINATION_CLICKED)
  .switchMap(() =>
    action$.ofType(FETCH_SUCCESS)
      .take(1) // <-------------------- very important!
      .map(() => analyticsAction())
      .takeUntil(action$.ofType(FETCH_ERROR))
  );

所以每次我们收到PAGINATION_CLICKED我们将开始监听内部 Observable 链,该链监听单个FETCH_SUCCESS。拥有它很重要.take(1)因为否则我们会继续听不止一个FETCH_SUCCESS这可能会导致奇怪的错误,即使不是,通常最好的做法是只采用您需要的内容。

We use takeUntil取消等待FETCH_SUCCESS如果我们收到FETCH_ERROR first.


作为奖励,如果您决定也想根据错误进行一些分析,不仅可以重新开始,还可以使用race确实在两条溪流之间进行比赛。第一个发出的为胜;另一个已取消订阅。

action$
  .ofType(PAGINATION_CLICKED)
  .switchMap(() =>
    Observable.race(
      action$.ofType(FETCH_SUCCESS)
        .take(1)
        .map(() => analyticsAction()),
      action$.ofType(FETCH_ERROR)
        .take(1)
        .map(() => someOtherAnalyticsAction())
    )
  );

这是同样的事情,但是使用race作为实例运算符而不是静态运算符。这是您可以选择的风格偏好。他们都做同样的事情。使用您更清楚的一种。

action$
  .ofType(PAGINATION_CLICKED)
  .switchMap(() =>
    action$.ofType(FETCH_SUCCESS)
      .map(() => analyticsAction())
      .race(
        action$.ofType(FETCH_ERROR)
          .map(() => someOtherAnalyticsAction())
      )
      .take(1)
  );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Redux Observable 等待操作序列 的相关文章

  • Flutter Redux 和 Hook。如何像react一样观察useEffect内部变量实例的变化?

    我是 flutter 新手 试图观察像 React Native 这样处于减速器状态的变量 count 我使我的 redux 和 hook 工作完美 屏幕上的变量计数发生变化 但如果我更改操作 则永远不会再次调用 useEffect 仅一次
  • 如何在redux中设置初始状态

    我试图弄清楚如何在 redux 中设置商店的初始状态 我在用着https github com reactjs redux blob master examples todos with undo reducers index js htt
  • React 中模型更改 11 次后 Froala 编辑器崩溃

    我在没有身份的情况下在线构建了一个简单的编辑器 在后端实现Node JS 与 Socket IO MongoDB 以及客户端使用React连接Socket IO 为了创建编辑器 我使用了弗罗拉编辑 https www froala com
  • 如何将 setTimeout 添加到使用 redux 的 fetch Promise 中?

    经过一定的秒数后 如果获取承诺尚未得到解决 我想向用户显示超时错误 我在这里看到了一些添加 setTimeout 来获取的很好的例子 https github com github fetch issues 175 https github
  • 监听 redux 动作

    我想创建一个可重用的 redux 表模块 它将存储和更新页码 显示的总页数等 我可以在所有页面之间共享这些模块 但是 我需要更新操作来触发刷新数据操作 该操作将根据页面到达不同的端点 因此 可能类似于页面特定的监听 RefreshData
  • 向 ReduxReducer 添加回调

    是否有任何错误 反模式 就 React Redux 中的思考 中添加了一个回调action data转化为行动 reducer ACTION FOR REDUCER var x 123 if action data callback act
  • 以编程方式更改 Redux-Form 字段值

    当我使用redux formv7 我发现没有办法设置字段值 现在在我的form 我有两个select成分 当第一个时 第二个的值就会很清楚select元件值改变 在类渲染中 div div site div div div div
  • Redux-saga 从操作中获取数据返回patternOrChannel 未定义

    我需要将动态数据从屏幕发送到操作 减速器 并使用该数据从 API 获取数据 但是当我在我的rootSaga我会收到这样的错误 在检查 take patternOrChannel 时未捕获 patternOrChannel 未定义未捕获在 r
  • 即使不改变对象和数组,也无法更改减速器中的嵌套对象

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

    我在 Node 中构建了一个简单的 CRUD 应用程序 并已在 Express 中完成了其余 API 的创建 我现在正在寻求添加前端功能 并希望使用 React Redux 作为学习练习 然而 似乎所有围绕此的教程都直接使用 Redux 访
  • 无法解构“undefined”或“null”的属性“user”

    使用 redux 检索用户信息时出错 我想从数据库获取用户信息 姓名 密码和头像地址 然后对其进行编辑 我正在使用nodejs express react redux 和jwt Actions user js import axios fr
  • React-Redux:操作必须是普通对象。使用自定义中间件进行异步操作

    未处理的拒绝 错误 操作必须是普通对象 使用自定义中间件进行异步操作 我想为每个帖子添加评论 因此 当运行获取帖子时 我想为所有帖子调用获取评论 API export function bindComments postId return
  • 在 createAsyncThunk 上调度操作?

    我有一个 thunk 动作是由createAsyncThunk 我想在调用 api 更新状态之前调度一个操作 我不想使用动作getProducts pending因为我想要派遣actionLoading 对于其他 thunk 操作 我怎样才
  • Redux如何处理reducer中的错误

    我不确定如何处理 redux 减速器中的错误 当我的 API 获取返回数据时 我需要转换其结构并检查结果数据上设置的各种属性 但是 我不能在减速器中抛出错误 因为 redux 至少需要返回之前的状态 我该如何处理这个问题 注意 我正在使用反
  • 如何修复 React-Redux 应用程序中的 431 请求标头字段过大

    我正在 YouTube 上使用 Redux 完成 MERN 注册 登录身份验证教程 当尝试在 Postman 中将测试用户 POST 到服务器时 我收到 431 标头请求太大错误响应 我在一些地方读到清除浏览器中的缓存 历史记录是有效的 所
  • 如何缓存 API 响应并稍后在 React 和 Redux 中使用它?

    在我的基于 React 的应用程序中 有一个 REST API 调用 它一次性获取整个页面所需的所有数据 响应中包含的数据也可用于下拉菜单中 但我不确定如何实现这一目标 目前 每当选择下拉值时 我都会发出新请求 请建议我如何有效地实施它 而
  • 类型错误:Object(...) 不是react-redux 中的函数

    当我尝试在react redux 中 createStore 时 我收到了这个奇怪的错误 我不知道为什么 因为我之前在不同的应用程序中这样做过 但它工作得很好 TypeError Object is not a function src i
  • 使用 ngrx 时调度完成后执行代码

    在我的示例 Angular 2 应用程序中 我使用 ngrx store 和 ngrx effects 进行状态管理 下面是组件中添加新项目的函数之一 addAuthor this store dispatch addAuthorActio
  • 处理 Redux 和 React 中错误的最佳实践

    我的 redux 操作中有一个异步函数 它在我的减速器中返回一个像这样的对象 user fetching false fetched false error null 所以基本上当我开始调用异步函数时我将 redux 状态更新为fetchi
  • 如何在执行新操作时取消先前操作的执行?

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

随机推荐

  • 缺少 Perl 依赖项实际上并未丢失

    我正在尝试在 Amazon Web Services 的 EC2 实例上安装 OTRS Help Desk 我正在按照安装说明进行操作here http otrs github io doc manual admin stable en h
  • 谁负责下一个视图?

    在典型的 MVC 架构中 决定接下来显示哪个视图的逻辑在哪里 假设是某种具有多个视图 窗口 的应用程序 这些视图在不同时间可能可见或不可见 具体取决于用户操作 例如 有时应用程序可能需要用户填写包含其他详细信息的表单 有时则可能不需要 控制
  • 将 Types.NVARCHAR 与 Oracle JDBC 驱动程序结合使用来处理西里尔字符

    我正在尝试使用 JDK 1 6 中国家字符集类型数据的新方法 http download oracle com docs cd B28359 01 java 111 b31224 global htm BABJFAGA 得到一个标准的JDB
  • Flutter:获取视频第一帧

    Flutter项目中如何获取本地视频文件的第一帧 这是我的代码 ImagePicker pickVideo source ImageSource camera then File file if file null mounted I go
  • 如何使用 Visual Studio 代码在 ASP.NET Core 中添加 ASP.NET 身份

    这是我在 ASP NET Core 中的第一个项目 现在我需要在 Visual Studio 代码中为核心 MVC 应用程序实现 ASP NET 身份 我查了一下 但在 Microsoft 网站上找不到任何博客和文档来说明如何做到这一点 如
  • 如何安装imap客户端

    我正在尝试使用 IMAP 客户端库 https imapclient readthedocs org en stable https imapclient readthedocs org en stable 我下载了zip https py
  • `viewDidLayoutSubviews` 中的框架计算

    首先 我应该提到 这主要是一个效率问题 关于在哪里进行框架计算有很多讨论viewWillAppear太早了并且viewDidAppear太晚了 视图已经可见 常见的答案是进行帧计算viewDidLayoutSubviews 问题是 它被多次
  • Silverlight:如何禁用浏览器的刷新按钮?

    我正在开发一个 Silverlight 应用程序 即根本没有 HTML 内容 最大的抱怨之一是如果用户不小心按了 F5 应用程序就会重新启动 那么有什么办法可以禁用浏览器中的 刷新 按钮吗 或者至少处理F5 这里有几个选项 http for
  • Twitter 客户端中的自动链接@提及

    我正在构建一个基本的 Twitter 客户端应用程序 我正在尝试弄清楚如何使保存推文的 TextView 自动链接 提及 以便它们链接到任何人的 Twitter 页面 就像在 Twitter 网站上一样 我的猜测是 这将涉及制作一个自定义
  • 使用 Python evdev 模拟按住控制器 dpad 按钮

    我正在尝试使用 Python evdev 模拟按住控制器上的 DPad 按钮 到目前为止 我已经成功按下一个按钮 如下所示 import os import time from evdev import uinput ecodes as e
  • Active Records 按 ID 排序[重复]

    这个问题在这里已经有答案了 如果我有 id 为 1 2 3 4 的记录 并且想要以某种方式对它们进行排序 例如 1 4 2 3 我该怎么做 我想类似的东西 但它当然行不通 Service all order id 1 4 2 3 贾斯汀 韦
  • JVM 在 OutOfMemoryError 之后是否自行终止 [重复]

    这个问题在这里已经有答案了 发生 OutOfMemoryError 后 JVM 会自行终止吗 如果不是那么为什么 它会尝试收回资源吗 还是有其他原因 OutOfMemoryError 不会终止 JVM 如果它未被捕获 它将终止引发错误的线程
  • angularjs 获取表单操作并提交给它

    我有一个表单 我想捕获它的提交 检查数据的验证 然后将表单提交到 HTML 表单内的操作 div div
  • Jquery 验证自定义错误消息位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我正在尝试验证
  • 从点列表中获取两个最近的点

    我得到了一个整数 浮点数列表 我需要找到最接近的两个数字 我将如何仅使用嵌套 for 循环来做到这一点 如果点是一维的 就像您的输入只是一个数字列表 例如 1 4 6 2 那么你可以通过对它们进行排序并找到差异最小的在 O n log n
  • Reactjs - redux 表单和材质 UI 框架 - 具有自动类型 - 和清除字段功能

    我正在构建一个使用 redux 表单和材料 ui 框架的嵌套表单框架 迄今为止我已经在这里构建了组件 https codesandbox io s heuristic hopper lzekw https codesandbox io s
  • 在 GWT 中使数据网格的行可拖动

    我想制作一个数据网格 其中的行可以拖动 以便人们可以通过拖动行来上下移动行 由于数据网格的行将作为元素获取 我知道如何使小部件可拖动 但是如何使数据网格的行可拖动 我不想使用任何额外的插件或库来实现此目的 我所知道的唯一支持单元格小部件拖放
  • 如何配置 Hibernate 以立即应用所有保存、更新和删除?

    我该如何配置休眠 http www hibernate org 在会话执行每个操作后立即将所有保存 更新和删除应用到数据库服务器 默认情况下 Hibernate 将所有保存 更新和删除操作排入队列 并仅在经过一段时间后才将它们提交到数据库服
  • Scala:列表 [Tuple3] 到映射 [字符串,字符串]

    我得到的查询结果为List Int String Double 我需要将其转换为Map String String 用于在 html 选择列表中显示 我的破解方案是 val prices dao getPricing flatMap cas
  • 使用 Redux Observable 等待操作序列

    我有一个用例 在使用 Redux Observables 调度另一个操作之前 我需要等待一系列操作 我见过一些类似的问题 但我无法理解如何在给定的用例中使用这些方法 本质上我想做这样的事情 action ofType PAGINATION