问题标签 [rxjs-pipeable-operators]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3226 浏览

javascript - 如何基于另一个 Observable 重置 RXJS 扫描算子

onScrollEnd我有一个组件在呈现虚拟列表中的最后一项时触发事件。此事件将执行新的 API 请求以获取下一页并使用scan运算符将​​它们与先前的结果合并。

该组件还有一个触发onSearch事件的搜索字段。

scan触发搜索事件时,如何清除算子之前累积的结果?还是我需要在这里重构我的逻辑?

0 投票
1 回答
47 浏览

rxjs - 获取订阅结果并立即将其应用于另一个订阅

使用 RxJS,我需要从 Observable 中检索单个值,然后使用pluck().

我有一个可行的解决方案,但它并不优雅。有没有办法简化或改进流程?

0 投票
3 回答
10518 浏览

rxjs - RxJS 中的throttleTime 与 debounceTime 有什么区别,何时选择哪个?

我试图了解throttleTimevsdebounceTime以及何时使用哪个?

我有一个投票按钮,它向后端(计算投票)发出 API 请求。用户可以多次提交按钮,但我想限制每秒可以按下按钮的次数。

我知道throttleTimedebounceTime运营商可以做到这一点,但我应该选择哪一个?

0 投票
1 回答
764 浏览

angular - 角度自动完成异步不过滤

我正在做一个自动完成搜索框,我遇到的问题是,当我在输入中写一个词时,服务很好地返回了项目结果列表。如果有匹配的元素,则服务返回,如果没有,则返回空,但问题是我的组件列表没有随服务值更新,我不知道为什么。我在按照一个例子,我的不起作用。我希望有一个人可以帮助我。

这是服务请求。

这是组件中的请求,列表不会随着服务返回数据而更新。

这是视图。

0 投票
2 回答
154 浏览

typescript - 订阅推送通知服务后添加管道

情况:
我遇到了一个 rxjsObservable系统的用例,我可能需要在它启动后将piped 命令添加到 a中。Subscription

就我而言,我正在处理的应用程序必须被动地收听推送通知系统。可以通过此系统推送许多消息,我的系统需要对其进行响应。 但是,有一种可预见的情况,即未来将要实现的动态加载视图将需要向推送通知系统添加监听器。

问题:
鉴于我的应用程序处于我已经存在的状态,我可以在调用Subscription后添加一个额外的管道吗?.subscribe(() => {})

...如果我这样做,那么会发生什么,如果有的话?

解决方案:
@user2216584 和@SerejaBogolubov 的两个答案都包含这个问题的答案。

我的高级推送通知侦听器服务需要做两件事:

  1. 继续订阅,然后
  2. 能够从听众列表中提取。

复杂之处在于每个侦​​听器都需要侦听不同的消息。换句话说,如果我在 上收到消息foo_DEV,应用程序需要做的事情与推送通知系统在 上推送消息时不同bar_DEV

所以,这就是我想出的:

通过仔细研究构成我的推送通知系统核心的内部代码,我发现我们已经有了一个高阶Observable. websocket 代码创建了一个 observable ( connectionManager.connect()),它需要被缓存在服务中并被订阅。由于该代码特定于我工作的地方,我不能再多说了。

但是,缓存侦听器也很重要!每当连接更改状态时,subscribe调用.listen()都会遍历所有附加的侦听器,因此我可以通过 临时添加侦听器.addListener(),并且由于 rxjs 的Observable系统本质上是如何工作的以及我正在从范围内列表工作的事实的监听器,我有一个系统,我可以动态设置监听器,即使.connect()在配置任何监听器之前被调用。

这段代码可能仍然可以从重新设计/重构中受益,但我有一些有用的东西,这是任何良好编码的重要第一步。谢谢你们!

0 投票
1 回答
83 浏览

node.js - 如何修复嵌套订阅以按顺序工作?

我正在尝试多次订阅我自己的后端。当我的代码正在获取数据时,有些东西似乎无法正常工作。通过执行以下代码,除序列外,所有内容都按原样显示。因此,我的帐户以正确的顺序获取,但有时我的交易顺序错误。

我的代码:

方法“getTransaction”和“getAccounts”:

所以有时它看起来像这样:

账户1- “名字”“第二名”--账户2的交易--

Account 2 - "first name" "second name" --账户 1的交易--

我必须注意,有时它会以正确的顺序显示。

有人可以帮我修复我的代码吗?

0 投票
3 回答
18048 浏览

angular - RXJS 在管道内组合多个可观察对象

我有一个返回一定数量 id 的 API 调用。这些 id 中的每一个都用于进行新的 api 调用。这些 API 调用的结果需要组合成一个对象。

起初,我在第一个 api 调用的 .pipe(map) 运算符中使用了一个循环。在这个循环中,我进行了第二次 api 调用,并且在每个调用中的 .pipe(map) 运算符中,我将在我的角度组件中编辑一个变量。

这不是很漂亮,我实际上想知道这是否是线程安全的。我知道 javascript 是单线程的,但是让多个异步进程弄乱同一个全局变量似乎不太安全。

之后,我只是将第二个 api 调用返回的 observable 存储在一个数组中,方法是遍历 apiCall1 返回的 Id,并使用 forkJoin 相应地订阅和处理每个结果(参见示例)。

然而,这不是很漂亮,我想知道是否有一个我可以在我的管道中使用的操作员?

所以代替(伪代码):

是否有一个操作员使它像这样:

0 投票
0 回答
1116 浏览

angular - 如何使用 jasmine mocks 对 rxjs tap 运算符的错误块进行单元测试?

考虑以下 Http 拦截器:

我正在尝试对busyIndicatorService.hide发生错误时调用的进行单元测试,例如400404。我编写了以下测试,但我认为我没有正确地模拟处理程序。

结果:

以下测试用于测试成功块,我在其中模拟处理程序以返回新的 HttpResponse。

这是完整的测试类:

0 投票
1 回答
194 浏览

rxjs - 使用 RxJS 的排队功能

我在后端使用 rxjs 和 NodeJS。我有一个允许消费者运行远程纱线安装过程的 Rest API。install 函数返回一个可观察的进程。因此,当模块安装成功时,它会在 observable 和 complete 中发出一个值。此时,Rest API 会返回一个响应给用户说安装成功。如果安装失败,该过程将在流中抛出一个错误,并且 Rest API 返回另一个带有错误信息的响应。

我的问题是:

该 API 被消费者并行调用多次,因此后端会有并行安装。

我尝试油门操作员创建一个队列,但它保持第一个流处于活动状态。所以如果第一个进程“完成”,它返回“真”但流没有完成

我的期望:

要么有多个请求,要么必须排队。所以第一个将被处理,所有并行的一次都必须排队。当第一个被处理时,它必须将响应返回给 API 消费者(如 200 完成)并从队列中恢复下一个流。

[UPDATE-01 July 2019]:添加示例

您可以在stackblitz获取代码演示

我已经重新实现了现有代码,并且通过多次订阅将调用队列的服务来模拟我的 API 调用

0 投票
3 回答
888 浏览

angular - Rxjs,一个参数的管道

使用带有一个参数的 Pipe 函数与根本不使用 Pipe 有什么区别吗?

我目前正在执行本文中的 takeUntil 取消订阅策略。在这个 SO question的“官方解决方案”中,takeUntil 运算符是通过管道发送的。但是,在此页面上takeUntil 没有使用管道。

因此,我想知道使用带有单个 Rx 运算符的管道与根本没有管道是否有任何区别(内存泄漏/性能等)。