当出现内部可观察到的错误(Ajax请求)时,RxJs停止侦听单击事件。我试图弄清楚如何使事件侦听器挂接到按钮click事件并优雅地处理内部ajax错误。
这是我的示例代码和指向plunkr的链接
var input = $("#testBtn"); var test = Rx.Observable.fromEvent(input,'click'); var testAjax = function() { return Rx.Observable.range(0,3).then(function(x){ if(x==2)throw "RAWR"; //Simulating a promise error. return x; }); } test.map(function(){ return Rx.Observable.when(testAjax()); }) .switchLatest() .subscribe( function (x) { console.log('Next: ', x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); });
http://plnkr.co/edit/NGMB7RkBbpN1ji4mfzih
您可以使用catch运算符(或catchException别名)来捕获和处理可观察对象中发生的错误,以便不会将错误通知给订户。
catch
catchException
忽略错误:
return Rx.Observable .when(testAjax()) .catch(Rx.Observable.empty()); // continues with an empty obs after error.
处理错误:
var empty = Rx.Observable.return('default value'); return Rx.Observable .when(testAjax()) .catch(function (error) { console.log('error:', error); return empty; });