redux-observable 史诗,不发送任何新操作

2024-01-11

可能我是一个菜鸟,还没有完全理解这些东西应该如何工作,但是我在 redux-observable 中有一个史诗,我想用它来创建一个承诺,它将分派一个动作并等待一个解决之前采取不同的行动。我通过将操作映射到来使其工作'__IGNORE__'但我真的不想那样做。有没有办法让史诗只处理一个动作,而不传递其他任何东西?

这是我的代码:

export const waitFor = (type, action) => new Promise((resolve, reject) => {
   const waitForResult = action$ => action$.ofType(type).do(() => resolve()).mapTo({type: "___IGNORE___"});
   registerEpic(waitForResult);

   action();
 });

您可以使用以下方法从可观察链中丢弃任何 next 值.ignoreElements()RxJS 运算符

action$.ofType(type)
  .do(() => resolve())
  .ignoreElements();

另一种方法(没有更多的正确或错误)是创建一个仅订阅的匿名 Observable。

const waitForResultEpic = action$ => new Observable(observer =>
  action$.ofType(type)
    .subscribe(() => resolve())
);

这会隐式返回我们创建的订阅,以便它也附加到我们的 rootEpic 的生命周期中。因为我们从不打电话observer.next(),这个史诗从不发出任何值;就像ignoreElements().


尽管您没有询问,但您最终可能会注意到您的史诗将永远运行,监听与type多变的。这可能不是你想要的,如果你想匹配once然后完成。

您可以使用以下方法来完成此操作.take(1) http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-take操作员。

const waitForResult = action$ =>
  action$.ofType(type)
    .take(1)
    .do(() => resolve())
    .ignoreElements();

Or

const waitForResult = action$ => new Observable(observer =>
  action$.ofType(type)
    .take(1)
    .subscribe({
      next: () => resolve(),
      error: err => observer.error(err),
      complete: () => observer.complete()
    })
);

在应用程序的生命周期内,这只匹配一次——一旦收到,就不会再匹配一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redux-observable 史诗,不发送任何新操作 的相关文章

  • 你怎么知道无限长的承诺链何时完全结束?

    我试图使用 Promise 强制序列化一系列 Ajax 调用 用户每次按下按钮时都会进行这些 Ajax 调用 我可以成功地序列化操作 如下所示 sample async function real world this is an Ajax
  • 不解决或拒绝承诺是否安全

    想象一下一个 Web 应用程序 其路由需要在继续之前检查是否允许用户访问给定资源 已通过身份验证 检查依赖于数据库调用 在每条路线中 我可能有 authorizeOwnership req res then function do stuf
  • RXJS while 循环进行分页

    我尝试查询所有人员的数据swap api http swapi co URL swapi co api people 返回一个带有 people 数组的对象 以及我从中获取下一个数据的 URL swapi co api people pag
  • 为什么我的 Promise 定义会被执行?

    我对 Promise 很陌生 想知道为什么我的 Promise 定义在我没有调用的情况下就被执行了 then 或决心解决它 var promise new Promise function resolve reject console lo
  • 如何在 RxJS 中通过 ID 去抖

    我的问题是下一个 我想取消我的应用程序的点赞功能 我使用操作在我的应用程序中进行更改 例如 dispatch likePost 1 gt dispatch type LIKE POST id 1 给出下一个例子 我在时间 0 发送一个操作
  • RxJS:Observable.combineLatest 与 Observable.forkJoin

    我想知道两者之间有什么区别Observable combineLatest and Observable forkJoin 据我所知 唯一的区别是forkJoin预计可观察量将完成 同时combineLatest返回最新值 不仅forkJo
  • 如果可观察对象之一停止发出事件,为什么 Observable.race 无法工作?

    如果互联网连接丢失 我想在 webapp 中实现 websocket 重新连接 为了检测互联网是否丢失 我使用乒乓方法 这意味着我从客户端发送 ping 消息 服务器返回给我 pong 消息 当 webapp 加载时 我发送 init pi
  • Pipe 和 Tap VS 使用 ngxs 订阅

    我正在玩管道并订阅 如果我使用带有水龙头的管道 则控制台中不会登录任何内容 如果我使用订阅 它就可以工作 那么我做错了什么 import Observable from rxjs import tap take from rxjs oper
  • 角度 2 中的事件发生后重置计时器

    我在 15 分钟空闲会话后实现注销 而不使用第 3 方库或 ngrx 我创建了一个服务 run window onload gt this startTimer window onmousemove gt this resetTimer s
  • 轮询时承诺异步等待

    我正在尝试将使用承诺 和轮询 的函数转换为异步函数 但我不太确定它是如何工作的 我有这个 function myFunction return new Promise resolve gt stuff here var poll setIn
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 在 Angular 2 中进行并行调用 http get 或 post 调用

    如何在 Angular 2 中进行并行调用 HTTP get 或 post 调用 我有 2 个服务电话 其中一个愈伤组织的响应必须拨打另一个电话 有人可以建议我如何通过错误处理场景进行这些并行调用吗 如果您的服务是Observable基于而
  • 获取 Promise 的值并分配给变量

    utility fetchInfo 返回一个 Promise 对象 我需要能够获取此 Promise 对象的值 并将其值分配给一个变量 以便稍后在我的代码中使用 此刻 我可以愉快地打印出result到控制台 但我需要能够将此值分配给myVa
  • 如何在 RxJS 订阅方法中等待

    在 RxJS 主题的订阅回调内部 我想要await on an async功能 下面是打字稿转译器抱怨的代码示例 错误 131 21 TS2304 找不到名称 await async ngOnInit this subscriber dat
  • 避免在 Angular 2+ 中嵌套订阅?

    我有2个端点 1 个端点来获取当前用户的日志 1 个端点来获取该用户的授权 实际上我使用 this user subscribe e gt this grants get e subscribe x gt console log x 但这是
  • Javascript ES6 承诺支持“done”api 吗?

    例如 p new Promise function resolve reject throw err p done 在大多数 Promise Polyfill 库中 done 会抛出错误 并且当前执行将退出 但如果我们使用p then 什么
  • 如何在 Sails.js 中正确抛出和处理 Promise 中的错误?

    我开始将回调代码转换为 Sails js 中的承诺 但我不明白如何引发自定义错误并在承诺链中处理它们 Sails js 使用 Q 作为其 Promise 库 User findOne email req param professorEma
  • 可从 Angular2 中的

    使用 Angular 2 从按钮的 onclick 事件创建可观察对象的首选方法是什么 我不确定从组件代码中的 DOM 获取本机元素是否被认为是最佳实践 我该怎么做 或者是否还有其他我不知道的快捷方式 别想太多 ViewChild butt
  • 如何重复 ajax 请求,直到满足 RxJS Observable 的条件?

    我正在尝试重复请求 直到响应包含使用 RxJS 的数据 此时我想调用成功 或失败 处理程序 但我在使用 RxJS 时遇到了麻烦 这是我目前的方法 redux observable action observable mergeMap gt
  • Angular 7测试重试当模拟http请求无法实际重试时

    我有以下尝试使用 OAuth 的拦截器refresh token每当获得任何 401 错误 响应时 基本上 刷新令牌是在第一个 401 请求上获取的 获取后 代码会等待 2 5 秒 在大多数情况下 第二个请求不会触发错误 但如果触发错误 令

随机推荐

  • 生成maven项目继承/聚合图

    任何人都知道是否可以轻松生成 Maven 项目继承 聚合图 如下面的链接中所示 http sonatype com books maven book reference figs web pom real multi png http so
  • 使用 Google Analytics 进行 Vuejs 事件跟踪

    我希望跟踪按钮和链接上的谷歌分析事件 通常在 jquery 中 我会传递数据属性中的值并获取它们并调用所需的函数 我知道我不应该使用数据属性 所以我正在寻找执行此操作的最佳方法 可以有多个按钮使用不同的数据用途 属性 执行不同的跟踪 所以我
  • 加入条件查询给出错误“无法找到属性”

    我有两张表 Student 和 Courses 我必须连接两个表并获取特定字段 class Student extends Parent Long id Cache usage CacheConcurrencyStrategy READ W
  • char[] 和 char* 之间的区别? [复制]

    这个问题在这里已经有答案了 可能的重复 C char var 和 char var 之间的区别 https stackoverflow com questions 1880573 c difference between char var
  • 运行我的第一个 java 应用程序时出现 InvalidModuleDescriptorException

    我已经开始学习 Java 并在尝试运行我的第一个程序时遇到了问题 如下所示 public class HelloWorld public static void main String args TODO Auto generated me
  • Rcpp:无法打开共享对象文件

    我正在尝试开发一个 R 包 它利用阵列火 https github com arrayfire arrayfire 感谢 Rcpp 库 我已经开始编写示例代码 让我们将其命名为你好世界 cpp 看起来像这样 include
  • SQLAlchemy 按字段排序()

    我试图按字段对 SQLAlchemy ORM 对象进行排序 但使用特定的值顺序 既不是升序也不是降序 如果我在 MySQL 上执行此查询 它看起来像 SELECT letter FROM alphabet table WHERE lette
  • 在字典中存储函数 [Python]

    我目前正在构建一个应用程序 我需要迭代一系列基本执行相同操作的步骤 从而节省很少量的代码 约 15 行 步骤的数量将根据项目的配置方式而有所不同 因此对我来说为每个潜在实例创建单独的函数似乎有点愚蠢 在 JavaScript 中 我会做这样
  • 以编程方式更改 ASP.NET GridView 中列的样式(填充)

    我需要更改 ASP NET GridView 中一列的填充 而外部 CSS 文件中定义的所有其他 CSS 属性应保持不变 我该怎么做 提前致谢 更新 下面是我解决问题的代码 protected void gvwMaster RowDataB
  • Mac Kiosk 模式 API - 防止用户退出

    我正在编写一个 Mac 10 6 10 7 应用程序 该应用程序在允许用户访问计算机之前对 Active Directory 域对用户进行身份验证 我被告知不能允许用户通过传统登录服务登录 我已准备好身份验证代码 现在正在尝试使此登录窗口全
  • 在nosetests中有条件跳过TestCase装饰器

    有没有办法跳过整个TestCase基于使用鼻子测试的自定义条件 我的意思是unittest skip style I tried import unittest unittest skip No reason class TestFoo o
  • 如何在我的 fcm 消息中使用图像和 vibrate_timings

    我希望我的 FCM 通知包含自定义图像和振动模式 Firebase 提供的 AndroidNotification 类作为示例具有这两个变量 但我还没有看到任何方法让它工作 我尝试通过 C 类 AndroidNotification 将这两
  • 如何使滚动超过某个点后出现浮动菜单? [复制]

    这个问题在这里已经有答案了 我想让四个菜单选项卡在您滚动经过页面上的某个点 例如 1000px 后出现 我希望它们出现时从左向右滑入 这就是我想要的 但位于浏览器的左侧 任何意见都会受到赞赏 首先 您需要从跟踪页面的滚动开始 其次 您需要在
  • 重定向到 ASP.NET Core 的自定义“访问被拒绝”页面

    我正在编写一个使用 Windows 身份验证的 ASP NET Core 1 0 网站 我已经实现了授权并且正在按预期工作 目前 当给定用户的身份验证失败时 会显示通用的 HTTP 403 错误页面 如何配置 ASP NET Core 以便
  • 如何在 .NET 4.0 中使用代码契约而不让我的代码看起来混乱?

    我已经开始使用代码契约 并发现很难立即发现方法的 本质 以这个 非常简单 为例 public static void UserAddNew string domain string username string displayName C
  • 删除查询字符串和参数

    由于不值得在这里讨论的原因 Google 一直在为我的一个网站编制索引 其中 URL 中包含不必要的查询字符串 这些字符串是wordfence lh hid and wordfence logHuman 我想修改我的 htaccess文件以
  • Laravel 5 Seeder - 数据库中的多行

    我想知道是否可以像这样插入多行 或类似的东西
  • 我网站中所有页面的网站图标

    我了解到为网页添加网站图标的方法是在页面中添加以下几行 我应该在我网站的每个页面中添加此代码吗 我使用 Apache tomcat 集群来提供页面服务 还有其他简单的方法可以做到这一点吗 通常将一个名为 favicon ico 的文件放在网
  • 如何查看 Node.js Cloud Function 环境的文件系统性质?

    当我将 Cloud Function 部署到 GCP 用 Node js 编写 时 如何查看我的文件系统环境以进行调试 如果我想知道我当前的目录是什么或者我的应用程序旁边有哪些文件怎么办 当我们部署 Cloud Function 时 就会出
  • redux-observable 史诗,不发送任何新操作

    可能我是一个菜鸟 还没有完全理解这些东西应该如何工作 但是我在 redux observable 中有一个史诗 我想用它来创建一个承诺 它将分派一个动作并等待一个解决之前采取不同的行动 我通过将操作映射到来使其工作 IGNORE 但我真的不