【发布时间】:2015-05-22 09:38:42
【问题描述】:
我正在努力以预期的方式处理 Rx 错误。
当我有一个 Observable(例如,来自点击流)并且发生异常时,我想捕捉它但继续。我尝试过的所有解决方案都会捕获错误,然后结束 Observable。有没有办法抓住并继续?
例如,下面的 Observable 会发出“1”,然后是“Error”,但绝不会发出“3”。
var range = Rx.Observable.range(1,3)
.map(function(i){
if(i === 2){
throw "Error";
} else {
return i;
}
})
.catch(function(e){
return Rx.Observable.return(e)
});
range.subscribe(function(i){
console.log(i)
});
【问题讨论】:
-
继续源序列的唯一方法是不抛出。你能告诉我们你的真实用例是什么吗?
-
可观察的契约是它必须向观察者发出模式:(OnNext)* (OnCompleted | OnError)。所以当一个序列发出 OnError 时它就结束了。
-
@OliverWeichhold 真实情况是一个可观察的点击事件,其中
flatMap()可观察到一个http 请求。如果/当 http 请求失败时,点击 observable 不再发出。
标签: javascript system.reactive rxjs