2017-04-19 88 views
0

我遇到了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()?

回答

0

當您取消註釋o.subscribeo發出錯誤通知,對此您有沒有處理程序(你只設置onNext處理),所以這就是爲什麼你得到Uncaught error (line 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)); 
+0

感謝。這回答了這個問題。 –

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

o是您正在使用其rxjs函數序列訂閱的可觀察項。 o本身在訂閱時沒有捕獲

var o2 = o.catch(x => rx.of(5)); 

在這裏,您已經添加了產量和分配新的可觀測到o2

所以只有o2catch()函數而不是o

我不明白的是,subscribe()處理程序如何影響下一個?

不是。問題與解釋一樣,o observable在訂閱時沒有catch()。