订阅同一观察者

时间:2017-04-19 04:12:35

标签: rxjs

我正在使用RxJS遇到这种无法解释的行为,我似乎无法理解为什么。我有以下代码。

console.clear();
var rx = Rx.Observable;

var o = rx.throw(['error']);
var o2 = o.catch(x => rx.of(5));
// o.subscribe(x => console.log("1" + x));
o2.subscribe(x => console.log("2:" + x));

JsBin链接:https://jsbin.com/hikopob/edit?html,js,console

当我运行上面的代码时,它打印2:5,这是我所期望的。但是,如果我取消评论注释行,我会在控制台中看到以下内容:

  

“错误”

     

“未捕获错误(第10行)”

我不再看到在控制台中打印2:5了。我不明白的是,subscribe()处理程序如何影响下一个?我的catch()处理程序发生了什么?为什么完全忽略o2.subscribe()?

2 个答案:

答案 0 :(得分:0)

var o = rx.throw(['error']);
o.subscribe(x => console.log("1" + x));

o是您使用其rxjs函数序列订阅的可观察对象。 <{1}}本身在您订阅时没有捕获

o

在这里,您添加了一个catch并将新的observable分配给var o2 = o.catch(x => rx.of(5));

因此,只有o2具有o2功能,而不是catch()

  

我不明白的是,subscribe()处理程序如何影响下一个?

不是。问题如上所述,o observable在订阅时没有catch()。

答案 1 :(得分:0)

当您取消注释o.subscribe时,o会发出错误通知,您没有处理程序(您只设置了onNext处理程序),这就是您获取{的原因{1}}消息。因此程序在到达Uncaught error (line 10)

之前退出

如果你试试这个,你会发现不同之处:

o2.subscribe(x => console.log("2:" + x));