【发布时间】:2017-08-15 20:42:00
【问题描述】:
我知道这是这里描述的已知行为
基本问题在上面的链接中有描述,但这里是相关代码(取自链接)
// This is going to behave strangely
const source$ = Observable.interval(1000).share();
const mapped$ = source$.map(x => {
if (x === 1) {
throw new Error('oops');
}
return x;
});
source$.subscribe(x => console.log('A', x));
mapped$.subscribe(x => console.log('B', x));
source$.subscribe(x => console.log('C', x));
// "A" 0
// "B" 0
// "C" 0
// "A" 1
// Uncaught Error: "oops"
订阅中的错误将终止整个源流。
Observable 的解决方案是使用.observeOn(Rx.Scheduler.asap);
我对整个反应式编程还很陌生,我很难将此解决方案应用于我的Subject,因为主题不支持observeOn。
但我需要Subject,因为我需要将新的价值观推向高潮。
如何解决此问题或将observeOn 与Subject 一起使用?
observeOn 返回一个Observable。但我很难将observeOn 与我的Subject 结合起来。
如何使用 observeOn 并且仍然能够将值推送到我的主题?
这是当前代码(简化)
export class MyClass{
private messages: Subject<Message> = new Subject<Message>();
dispatchMessage(message: Message) {
this.messages.next(message);
}
想法?
附言
对于任何使用 angular 的人(比如我),observeOn 可能会产生一些不希望的副作用。 https://github.com/angular/angular/issues/14316
对于任何提出这个问题的人来说,都是额外的信息。
【问题讨论】:
-
解决方法是什么问题?
observeOn只是一个存在于Subject类中的运算符。 -
对不起,我弄混了。我为
observeOn返回Observable而不是Subject的事实而苦恼。我编辑了问题
标签: typescript rxjs subject