问题标签 [rxjs-observables]

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 投票
1 回答
50 浏览

angular - Angular 订阅在局部变量中未定义

我有一个局部变量,想在我们的 Angular 组件中使用 Observable 只是为了订阅它并在本地存储响应,但是它总是如何变得未定义。任何线索为什么它不分配?

0 投票
2 回答
46 浏览

angular - rxjs - 在两个不同的订阅中更改单个数据 - 使反应更灵敏

我是 Angular2+ 和 RxJs 的新手,所以如果我问一些明显的问题,我很抱歉。

功能性

当数据刚刚开始加载、startAction发出、isLoaded转动false并显示微调器时。

一旦数据被加载,endAction被发射, isLoaded 被设置为true。微调器被隐藏起来,并描绘了主要数据。

一旦用户单击另一个按钮,就会加载另一数量的数据。startAction再次发出,微调器将再次显示,直到数据加载。

我有的

在组件中:

在模板中:

我需要的

一切都很好,但我需要重新设计这种方法,使其更具反应性。我必须摆脱订阅并isLoaded变成可观察的才能通过async模板中的管道使用它。

我试过的

在组件中:

在模板中:

我的解释

根据我的理解,必须在andtakeLast(1)之间发出最后一个动作。所以当发生时,应该发出一个 observable over ,when -一个 observable over 。isStartLoadingisEndLoadingstartActiontakeLast(1)falseendActiontrue

出于某种原因,我只看到了初始微调器,并且没有描述结果数据。看起来我对combineLatest+takeLast应该如何协同工作有错误的理解。

当我tap(console.log)takeLast(1)/之后添加时last(),我看到它永远不会发出。但是当用 替换它时take(1),它预计只会发出一次。所以我看到了微调器,然后是数据,然后在单击另一个按钮后 - 新加载的数据有延迟且没有微调器,因为我们只采用第一个。

任何帮助表示赞赏!

0 投票
1 回答
217 浏览

node.js - 取消订阅仅在必要时发出一次的可观察计时器?

在我的程序中,我有一些timer(1000).subscribe()实例以及一些timer(1000, 1000).subscribe()部分。

我遇到了一些内存泄漏问题,想知道是否可以通过取消订阅计时器来缓解这些问题。取消订阅循环计时器似乎很简单且必要,但我是否还必须取消订阅只发出一次的计时器?

我的问题的第二部分是,是否有更好的方法来取消订阅发射计时器,而不是将其放入如下变量中:

谢谢!

0 投票
1 回答
403 浏览

angular - 在渲染下一个组件之前等待组件的数据加载 - Angular

我必须渲染一个组件链(比如刀片中的网格),其中在加载第一个组件的数据后,我将单击该组件的数据行,它将打开下一个组件。单击下一个组件的数据行时,它将打开另一个组件,依此类推。

我正在遵循的方法 - 我在所有这些组件之间有一个共享服务,并且每当为任何组件加载数据时,该组件都会在我的服务的 BehaviourSubject 上调用 next 方法 -this.service.dataLoadedEvent$.next(componentName)

我的服务方法看起来像 -

组件看起来像 -

但这里的问题是,在通知服务有关数据加载完成之前,for 循环会前进。因此它将循环变量设置为最后一个值,并在最后一个 componentInstance 上调用该方法,这不是预期的行为。任何帮助将不胜感激。提前致谢 !

0 投票
3 回答
1149 浏览

rxjs - RxJs:您可以将运算符作为参数传播到管道运算符中吗

我有两个可观察的流,它们执行非常独立的映射逻辑,但最终以以下 3 个运算符结束:

我想将最后一个tap, switchMap, map运算符移动到一个通用函数中,这样我就可以在我的两个可观察流中应用它们。

我想过这样做:

但我不确定如何将这些运算符传播到管道参数中,例如:#

这个错误there are no overloads that expect 3 or 5 arguments..

0 投票
1 回答
55 浏览

rxjs - 同步 RxJs 取消订阅不起作用

演示:https ://stackblitz.com/edit/rxjs-unsubscribe-issue?file=index.ts

下面的代码不起作用

错误:无法读取未定义的属性“取消订阅”

但是下面的代码正在工作

帮我理解背后的原因

0 投票
3 回答
6251 浏览

angular - 使用 Angular Observable 订阅 Session Storage 密钥

我正在尝试完成我希望的简单的“查看会话存储中的密钥并在它发生变化时更新它”的场景,但是 Observables 真的让我很受挫。

message$ 绑定到 HTML,非常简单:

如果“Observable消息HTML”中已经存储了值,但如果 init 上没有消息然后它被添加,或者消息值确实存在并被更新,则不会发生任何事情。我显然做错了什么,我会很感激有知识的人的洞察力Observables

0 投票
1 回答
205 浏览

angular - 这个可观察到的泄漏内存吗?

根据这篇文章,我对 observables 还很陌生。下面的示例会泄漏内存。然而,我在网上看到了大量的教程展示了这样的例子。

上面的代码是否泄漏内存?我们总是必须退订吗?http 调用呢?

observables 的一般最佳实践是什么?

0 投票
1 回答
141 浏览

angular - Mat Select 使用 Observable 显示空选项

我正在使用 Observable 的结果创建 mat-select 选项,但选项未呈现。当它是简单的数组时,它正在渲染。

以下是我构建的示例 -请参见此处

0 投票
2 回答
307 浏览

angular - 使用 RxJs ConcatMap 不要发送 null 值或空字符串

我正在使用 RxJs concatMap 来控制我的应用程序中某些数据的保存。

目前这有效,但是即使说“this.OneData”为空或为空,它也会执行......我怎样才能让它基本上不发送 NoOpp 请求?