问题标签 [rxjs-subscriptions]

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 投票
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 投票
4 回答
7015 浏览

angular - Angular 清除订阅的更好方法

有很多方法可以在一个组件中有效地处理多个订阅,我这里有两种方法,想知道哪种方法更有效,为什么?

方法一:使用数组

第 1 步:创建数组

第 2 步:向数组添加订阅

步骤 3:迭代每个订阅和取消订阅

方法二

第 1 步:创建新订阅

第 2 步:添加订阅

Step3:清除订阅

0 投票
0 回答
117 浏览

angular - 具有多个观察者的 Rxjs 主题和去抖动仅订阅最后一个

我有一个 Angular v7 应用程序,我在其中使用 Rxjs 主题。以下是部分代码。我正在使用多种方法订阅。但只有最后一个订阅有效,其他订阅无效。

什么是正确的方法?

谢谢

0 投票
1 回答
35 浏览

angular - http调用之上的包装器可观察事件

我有一个返回对象的函数。不是同步返回对象,而是可以将它返回到一个可观察对象中,该对象可以稍后使用回调解决(类似于 http 调用)。

调用函数:

称为 Fn

你能告诉我这是否可能以及如何创建和返回一个 observable 就像 http 调用如何返回一个?

0 投票
1 回答
306 浏览

javascript - Angular:如何防止组件模板同时闪烁两个条件语句?

当组件初始化后条件发生变化时,我试图阻止我的组件模板闪烁两个条件语句。

我的应用程序收到一个令牌,并根据它的有效性在模板中显示必要的内容。问题是令牌被发送到 API 并且在它响应之前组件已经初始化,因此采用默认布尔值。如果令牌有效,则布尔值为真,因此模板显示两个条件语句一秒钟,然后隐藏 else 语句。

期望的结果是组件模板等待 API 调用完成,然后根据最终的布尔值显示正确的内容。

0 投票
1 回答
588 浏览

angular - 如果我不关心响应,Angular 8 是否需要订阅请求

我希望这是有道理的。我决定改变我的一些服务的工作方式仅仅是因为订阅响应和在不同的视图中处理创建、更新和删除变得有点麻烦。所以我决定做一个这样的通用服务:

这个服务背后的想法是,initialize方法只被调用一次,当它被调用时,你可以看到它将响应映射到服务本身内的items数组。然后,当执行创建、更新或删除时,更改的是该数组。

这将(理论上)允许任何组件订阅items数组以更新任何更改。

因此,我有一些“扩展”此服务的服务,例如:

到目前为止,一切都很好。所以,我的问题是:我是否必须调用初始化方法并调用订阅?

例如,目前我有这个组件:

正如您在私有方法中看到的pipe那样firstsubscribe如果我想从那里得到结果,我会这样做。在我的“子”组件中,我有这个:

如您所见,我从filterService订阅了items数组。所以,在我的父控制器中,我认为我实际上不需要订阅,但如果我删除它就不起作用。

我以为我可以做类似的事情:

代替

我做错了什么,还是我必须这样做?我希望我解释了自己:)

0 投票
3 回答
1381 浏览

angular - 如何订阅条件订阅结果

我正在尝试执行 3 个异步操作(可观察),一个在另一个内部。1. 第一个 observable 是模态对话框 eventEmiter 的响应 - 流程的其余部分取决于它的响应(假设模态返回布尔发射器涉及:“你想删除项目”)。2. 第二个 observable 是更新(删除)动作 3. 第三个是取回删除后的新数据。

我正在使用 rxjs- 并尝试弄清楚如何在不订阅订阅的情况下做到这一点。查看我的代码:

0 投票
1 回答
639 浏览

angular - Angular8 RXJS CanDeactivate 在停用前等待可观察的结果

我正在尝试使用 CanDeactivate 防护来检测用户何时离开组件。目的是 #1 检查当前用户是否拥有记录上的“正在编辑”锁,如果是 #2,则调用 observable 来更新数据库。

我拥有的代码部分工作,但有一个竞争条件,锁并不总是被释放,可能是因为在this.updateIsBeingEdited$(false)调用下一个 return 语句时订阅并不总是完成。所以我知道这没有正确实施。

如何使this.updateIsBeingEdited$可观察对象在 canDeactivate 返回值之前完成?

返回值应始终为 true,因为组件应始终停用,它只需要确保this.updateIsBeingEdited$.subscribe()在停用完成之前完成。

零件

警卫

0 投票
2 回答
2354 浏览

angular - Angular RxJS - 需要等到订阅以其他方法完成

我有一个场景,当用户输入文本时,我必须点击 API 并保存输入的数据。因为每次击键都点击 API 效率很低。所以我使用了'fromEvent' RxJs 运算符来消除抖动一秒钟。

问题是我无法更新 HTML(因为我在这里简化了 HTML,但在我的项目中它是一个可折叠的面板,它会导致一些我不想要的 HTML 元素消失),因为我输入数据所以这就是原因我将响应存储在临时变量“recentResponse”中,然后单击“保存”按钮更新 HTML。

但这里的问题是,如果用户键入速度非常快并单击“保存”按钮,则订阅完成需要几秒钟,直到那时“recentResponse”未定义,因此“患者信息”永远不会得到更新(HTML 也是如此)。

我怎样才能等到订阅在 onSave() 中完成?我需要等到“recentResponse”有一些回应。