RxJs-catch不';在同一个观察者上订阅后不工作

RxJs-catch不';在同一个观察者上订阅后不工作,rxjs,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:" +

我在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链接:

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

“错误”

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

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

var o = rx.throw(['error']);
o.subscribe(x => console.log("1" + x));
o
是您使用其rxjs函数序列订阅的可观察对象
o
本身在您订阅时没有捕获

var o2 = o.catch(x => rx.of(5));
在这里,您添加了一个捕获,并将新的可观察对象分配给
o2

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

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


事实并非如此。问题如前所述,
o
observable在订阅时没有catch()。

当您取消对
o.subscribe
的注释时,
o
发出一个错误通知,您没有处理程序(您只设置了
onNext
处理程序),因此您会得到
未捕获错误(第10行)
信息。因此,程序甚至在到达
o2.subscribe(x=>console.log(“2:+x”)之前就退出了

如果您尝试此方法,您将看到不同之处:

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), x => console.log("error:" + x));
o2.subscribe(x => console.log("2:" + x));

谢谢这就回答了问题。