我正在使用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()?
答案 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));