rxJs主题,订阅错误导致整个流

时间:2017-08-15 11:45:28

标签: typescript rxjs subject

我知道这是一种已知的行为,如此处所示

基本问题在上面的链接中描述,但这里是相关代码(取自链接)

// 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因为我需要将新值推向蒸汽。

如何解决此问题或将observeOnSubject一起使用?

observeOn会返回Observable。但我很难将observeOnSubject结合起来。 如何使用observeOn并仍然可以将值推送到我的主题?

这是当前代码(简化)

export class MyClass{

    private messages: Subject<Message> = new Subject<Message>();

    dispatchMessage(message: Message) {

     this.messages.next(message);
}

想法?

P.S。

任何使用角度的人(像我一样),observeOn可能会产生一些不良副作用。 https://github.com/angular/angular/issues/14316

正如此问题的任何人的其他信息。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您只需要单独引用go_loop "/tmp/text.txt" 'echo $i' 以及在追加class Gun(object): def shoot(self): # for example: 'shoot with silver_bullet' print('shoot with %s' self.bullet) 运算符后对链的引用:

Subject