动态过滤rxjs流

2024-02-16

我正在使用 RXJS,并且希望动态过滤数据,但遇到问题:

let numberSource: ReplaySubject<Number> = new ReplaySubject<Number>();
let numberFilter: BehaviorSubject<Number> = new BehaviorSubject<Number>(5);

let filteredData = numberSource.filter(n => n < numberFilter.value);
numberFilter.subscribe(newFilter => {
  filteredData = numberSource.filter(n => n < newFilter);
  filteredData.subscribe(console.log);  // <- I think this is wrong
});

console.log("A");
filteredData.subscribe(console.log);

numberSource.next(1);
numberSource.next(10);
numberSource.next(100);

console.log("B");
numberFilter.next(50);

我正在做的是订阅 numberSource,这是我有兴趣显示的数据。我还订阅了 numberFilter,因为我希望对其进行任何更改以重播该主题,但我认为我做错了。

我期待看到:

A
1
B
1
10

我看到:

A
1
1
B
1
10

有人可以帮忙吗?


我想我明白你想做什么。你想堆叠所有发出的值numberSource能够重新发送并过滤它们numberFilter变化。

您实施中的主要问题是numberFilter is a BehaviorSubject它发出默认值(5在这种情况下)每次您订阅它时都会在线上发生numberFilter.subscribe(newFilter => ...。该回调订阅filteredData然后紧接着又console.log("A");。所以你甚至还没有开始向numberSource并且您已经订阅了两次。这就是为什么它给你1两次。

简单的解决方案是使用经典Subject并记住unsubscribe()之前的订阅filteredData:

let numberSource: ReplaySubject<Number> = new ReplaySubject<Number>();
let numberFilter: Subject<Number> = new Subject<Number>();

var subscription;
numberFilter.subscribe(newFilter => {
  if (subscription) {
    subscription.unsubscribe();
  }

  subscription = numberSource.filter(n => n < newFilter)
    .subscribe(console.log);
});

numberFilter.next(5);

console.log("A");

numberSource.next(1);
numberSource.next(10);
numberSource.next(100);

console.log("B");
numberFilter.next(50);

观看现场演示:http://plnkr.co/edit/vOaD8tcWlLRdfzU14Ufw http://plnkr.co/edit/vOaD8tcWlLRdfzU14Ufw

现在它为您提供了您想要的输出。

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

动态过滤rxjs流 的相关文章

  • 安装 npm 包时自动安装类型定义

    有没有办法配置npm以这样的方式 每当我安装一个包时 它都会 检查里面是否有类型定义 如果没有 请尝试安装 types PACKAGE与 save dev flag 理想情况下 我希望这能够自动发生 作为插件或其他东西 而不需要编写限制 A
  • 如何在打字稿中的类方法上强制执行函数类型接口?

    许多方法的class我隐含地写着同样的功能类型 https www typescriptlang org docs handbook interfaces html function types 我想要做的是强制执行此函数类型 以便我可以明
  • 从节点使用 TypeScript 编译器

    使用咖啡脚本可以很容易地做到这一点 var coffee require coffee script coffee compile a 1 gt function n var a n n a 1 n n call this n 有没有办法用
  • 如何使用 Typescript 设置 Material-UI for React?

    我在将 Material UI 添加到我的 React 项目中时遇到了一些问题 该项目是用 Typescript 编程的 根据教程 我首先添加react tab event plugin import injectTapEventPlugi
  • 让Webpack不捆绑文件

    所以现在我正在使用一个原型 我们使用 webpack 用于构建 tsx 文件和复制 html 文件 和 webpack dev server 之间的组合来提供开发服务 正如您可以假设的那样 我们也使用 React 和 ReactDOM 作为
  • Angular 5 中使用 rxjs 进行持久订阅

    我对 Angular 5 中的 rxjs 仍然有点陌生 并且很难表达我的问题 我仍然希望得到一些提示 我经常会得到相同的设置 多个组件显示相同的数据 访问数据的单个服务 现在通过 Observables 接收数据时我有 2 个选择 a 订阅
  • Typescript 通用联盟

    所以我有通用对象数组 想要迭代但打字稿不允许我 这是一些示例代码 有关如何解决此问题的任何建议 type someGeneric
  • 打字稿交集类型和函数签名不会引发预期错误

    我声明了以下类型 type ExampleA a string type ExampleB b number type ExampleC c boolean type Examples ExampleA ExampleB ExampleC
  • 如何在 inversify 中注入异步依赖?

    我有 TypeScript 应用程序并且正在使用反转 http inversify io 对于国际奥委会 我有一个连接类 use strict import injectable from inversify import createCo
  • 无法在 .tsx 文件中导入 CSS 模块

    我正在使用 typescript 构建基本的 React 应用程序 但无法导入 CSS 文件索引 tsx file 我能够导入索引 css文件如下 import index css this import gives typescript
  • 类型“never”上不存在属性“click”。 TS2339

    根据有关 TypeScript 此类错误的其他类似问题 关于问题 44147937 https stackoverflow com questions 44147937 property does not exist on type nev
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • 第二个函数参数的条件类型

    我有以下功能 function doSomething param1 string param2 string return param1 param2 我也有基于 json 的类型 其结构看起来与此类似 a1 b1 something1
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • 如何解决此错误“不要使用对象作为类型”?

    我不明白这个错误消息造成的 我的组件有两个和一个包含对象的数据数组 我收到一条错误消息 不要使用object作为一种类型 这object类型目前很难使用 我该如何解决它 我附加了数组包含对象的数据 first tsx import data
  • 没有导出的成员/节点模块

    我刚刚开始使用 5 分钟快速入门找到的 Angular 2 Typescripthere https angular io docs ts latest quickstart html 我遇到了一个看起来很常见的问题 但可能有点不同 我遇到
  • tsc-watch 是否消耗 TSC_NONPOLLING_WATCHER?

    我正在从事微服务集成项目 我使用同时运行 8 个打字稿服务tsc watch preserveWatchOutput onSuccess node build index js 即使我根本不编写源代码 这些进程也会消耗 70 的 CPU 我
  • 在 TypeScript 中实现类型安全的服务注册表

    我想要一个函数根据给定的标识符 例如字符串或符号 返回对象实例 在代码中它可能看起来像这样 define your services type ServiceA foo gt string const ServiceA foo gt bar
  • type-graphql:如何知道Resolver返回了哪些字段

    我正在编写一个使用 type graphql 的后端应用程序 GraphQL 架构包括Folder键入如下所示 type Folder id ID name String rules Rule parent Group Rule and G

随机推荐

  • 使用 SQL 检查列是否包含文本

    我有一个名为studentID 但我有millions记录 并且应用程序以某种方式输入了一些任意文本在专栏中 我如何搜索 SELECT FROM STUDENTS WHERE STUDENTID CONTAINS TEXT 将数据库建模问题
  • 为什么 CSS 中引入了边距折叠规则?

    这套巧妙的规则什么时候可以发挥作用 它们打破了盒子模型的简单性 当您将不同的布局组合在一起时 它们会带来无限的麻烦 那么原因是什么呢 Rules http www w3 org TR css3 box collapsing margins供
  • ftp_ssl_connect 和 ftp_nlist

    我需要连接到远程系统以获取一些文件 远程系统的规格提到 所需的协议是 SFTP SSH 文件传输协议 端口号是22 首先 我使用 FTP 客户端应用程序尝试使用给定的凭据登录新服务器 起初我 遵循系统的规格 使用了通过 SSH 进行 SFT
  • JOptionPane 变灰一键

    我需要使用一个JOptionPane给用户两个选择 根据之前的操作 可能需要禁用其中一个按钮 是否可以与JOptionPane能够将其中一个按钮设置为禁用或启用吗 我怎样才能做到这一点 如果您使用 JButtons 这很容易 public
  • 在 PowerShell 中将控制台设置为最顶层

    因此 虽然有很多关于如何设置的建议forms最上面 我找不到任何可以让我的控制台在最上面运行的东西 所以我的问题是 如何让我的控制台在脚本期间运行在最上面 这需要一些 NET 互操作 如本博客中所述 TechEd 2012 中的脚本 第 1
  • worklight ant 任务应用程序部署 - WL 控制台安全性处于活动状态时出现未经授权的错误

    我正在尝试使用提供的 ant 任务 app deployer 将应用程序部署到 WL Server v5 0 5 这是我使用的简单构建文件
  • Pandas - 将内存中作为字符串存储的csv读取到数据帧

    将逗号分隔的文本存储在如下所示的 var 中 data Class Name Long Lat A ABC11 139 6295542 35 61144069 A ABC20 139 630596 35 61045559 A ABC03 1
  • Pandas 层次排序

    我有一个类别和金额的数据框 可以使用冒号分隔的字符串将类别无限嵌套到子类别中 我希望按金额降序排序 但以分层类型的方式如图所示 我需要如何排序 CATEGORY AMOUNT Transport 5000 Transport Car 490
  • 为什么 emma 不完全覆盖 finally 块?

    我不明白为什么艾玛没有为 finally 块提供完整的代码覆盖率 我制作了一个简短的示例程序来演示这一点 当我执行该程序时 它显示 try finally 所以我不明白为什么finally被标记为红色 未执行 而 finally print
  • 更改项目目标框架后应用程序设置错误

    在我的应用程序中 我正在使用用户设置 如下所述here http msdn microsoft com en us library aa730869 28v vs 80 29 aspx 然后我意识到在 VS 2010 中我使用的是 NET
  • 混合文件和循环[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在编写一个脚本 该脚本记录另一个程序的错误 并在遇到错误时从中断处重新启动该程序 无论出于何种原因 该程序的开发人员
  • 如何在 EF 查询中执行日期比较?

    请帮忙 我试图弄清楚如何在 linq 查询中使用 DATE 或 DATETIME 进行比较 例子 如果我想要今天之前开始的所有员工姓名 我会在 SQL 中执行以下操作 SELECT EmployeeNameColumn FROM Emplo
  • 如何从 proguard 构建中排除 R*.class 文件

    我距离制定此处描述的方法仅一步之遥 使用 Scala 2 8 Trunk 构建面向 Android https stackoverflow com questions 2761443 targeting android with scala
  • Django - 反向查询名称冲突

    我在 Django 中放置了一个循环外键 这导致了名称冲突 我不明白为什么会发生冲突或如何最好地补救 这是我第一次在模型中进行循环引用 所以我不确定这是否是问题的根本原因 对于以下情况 class Supplier models Model
  • 在 Node.js 中使用 node-soap 通过 Soap 发送参数

    我刚刚开始使用 NodeJS 并且正在深入研究使用 SOAP 服务milewise 的节点肥皂 https github com milewise node soap readme 我使用基本的电子邮件地址验证 SOAP API 作为我的测
  • 用于重命名/重构的 Eclipse 键盘快捷键将于 2022 年 3 月解除绑定

    我最近将 Eclipse IDE 从 2021 12 更新到 2022 03 我发现重命名 重构 alt shift r 的快捷方式被删除了 这是一个错误吗 稍后会修复吗 这是故意删除的吗 这是一个非常有用的键盘快捷键 但我不明白 为什么
  • 如何强制 Kubernetes 重新拉取镜像?

    我在 GKE 上的 Kubernetes 中有以下复制控制器 apiVersion v1 kind ReplicationController metadata name myapp labels app myapp spec replic
  • IronPython.Runtime.Exceptions.ImportException:没有名为 os 的模块

    我在 C Net 3 5 应用程序上使用 IronPython 和 VS 2015 我阅读了有关此主题的所有帖子 但仍然收到此错误 我的代码 static void Main string args var engine Python Cr
  • 从 jquery mobile 中的 URL 获取参数值

    我有一个名为 servicesDetails html 的页面 其中包含链接 网址如下所示 Myapp servicesDetails html servicetype Advanced serviceid 1208 单击链接时会加载一个名
  • 动态过滤rxjs流

    我正在使用 RXJS 并且希望动态过滤数据 但遇到问题 let numberSource ReplaySubject