问题标签 [subject-observer]

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 回答
1540 浏览

java - FlatMap 和主题 - 如何避免重复订阅者?

假设我有以下代码:

它产生的输出是:

不断地。

我理解它为什么会发生 - 这是因为每次flatMap调用时,都会将新订阅者添加到subject2.

问题是 - 如何避免这种情况?

0 投票
1 回答
1301 浏览

angular - Angular 2.0.1 AsyncPipe 不适用于 Rx 主题

AsyncPipe 与 BehaviorSubject 一起使用,但我不想用空数据初始化我的服务,因此我使用 Subject intead。

问题是 NgFor 和 asyncPipe 不适用于 Subject,这是一个问题吗?

这有效:

零件:

模板

这不起作用:

零件

模板

0 投票
1 回答
105 浏览

angular - Angular2路由器不改变组件

我有 1 个组件,我想为不同的路由器链接重用它们的路由如下所示:

该组件需要从每个路由器链接的不同位置获取。问题是组件订阅了一项服务,现在每次我导航到不同的路由器链接时,订阅都会叠加。我该如何解决这个问题?

0 投票
1 回答
3199 浏览

spring - 在不同的线程 rxJava 上运行 PublishSubject

我正在运行 RxJava 并创建一个主题以使用onNext()方法来生成数据。我正在使用Spring

这是我的设置:

在 RxJava 流上生成新数据的方式是通过@Autowire private SubjectObserver subjectObserver 然后调用subjectObserver.publish(newDataObjGenerated)

无论我为subscribeOn()&指定什么observeOn()

  • 调度程序.io()
  • Schedulers.computation()
  • 我的主题
  • Schedulers.newThread

onNext()和它里面的实际工作是在同一个线程上完成的,这个线程实际上调用onNext()了主题来生成/产生数据。

这个对吗?如果是这样,我错过了什么?我期待在doSomething()不同的线程上完成。

更新

在我的调用类中,如果我改变调用publish方法的方式,那么当然会分配一个新线程供订阅者运行。

谢谢,

0 投票
1 回答
841 浏览

angular - Angular2:Angular2子父组件交互中的rxjs Subject

我想手动订阅由指令发出的事件,根据设计,它应该可用于我的应用程序的多个组件。目前结构如下:

app.module看起来像这样:

在开发的后期,另一个 Parent 组件将监听可拖动指令并实现自己的逻辑。

没有一个子组件知道(或应该关心) Draggable Directive 对它做任何事情。父组件应该。因此,在父组件中:

这是指令,使用 Subject 而不是 EventEmitter,正如其他地方所推荐的:

我得到带有正确值的控制台日志“发射”。我从来没有从控制台的父组件中得到“监听”。我在这里做错了什么?

0 投票
1 回答
1740 浏览

javascript - 如何在 RxJs v5 中从 Subject 创建 Observable 而不将 Subject 暴露给消费者

我正在尝试从内部使用 Rx.Subject 的函数返回一个可观察对象。当然,与任何好的 API 一样,实现细节应该完全从消费者那里抽象出来。但是,使用 Subject.asObservable() 似乎任何消费者都可以向所有观察者发出新值。

例子:

所以我的问题是,有没有一种内置的方法可以将 Observable 暴露给消费者而不让他们访问原始主题?如果不是,这显然是 RxJs 的糟糕设计。

注意:这是针对 RxJS v5

0 投票
1 回答
671 浏览

angular - Angular2 - 即使在取消订阅后,Rxjs 主题也会运行两次

我正在使用 angular2 和 electron 编写一个桌面应用程序,并且有一个下载功能。

DownloadService的是这个

ItemComponent的是这样的:

问题是当我暂停一个我取消订阅的项目SubjectDownloadService,当我再次恢复时,每次console.log()打印两次并将两次数据添加到downloadedBytes. 此外,如果我再次暂停并恢复,它将添加越来越多的字节和日志!

我搜索了但我找不到任何线索来解决。

0 投票
1 回答
705 浏览

c# - Reactive Observable Subscription:停止订阅和续订

我有一个来自 BlockCollection 的 Observable,我像队列一样使用它

并订阅他:

现在我有另一个 Observable:

想当 OnTimerNextSubscribe开始停止订阅_subscription并在 OnTimerNextSubscribe 完成时更新它。

最好的做法是什么?
我应该处置_subscription并调用StartSubscription()

0 投票
2 回答
9656 浏览

javascript - 具有布尔值的 BehaviorSubject 未按预期工作

我已经实现了一个简单的BehaviorSubject

现在运行时stStatus()会在控制台上显示以下输出。

虽然我期望值

我的实施有什么问题?

0 投票
1 回答
666 浏览

rxjs - 在 ngrx 中获取当前状态

是在 ngrx 中获取当前状态的解决方案。这个例子很简单——你只需使用take(1). 但是在它的 rxjs 文档中take说:

从可观察序列的开头返回指定数量的连续元素

为什么取第一个值会得到当前状态(即最后一个值)?

此外,我在使用Subject.