我有一个要解析的项目列表,但其中一个项目的解析可能会失败。
捕获错误但继续执行序列的“Rx-Way”是什么
代码示例:
var observable = Rx.Observable.from([0,1,2,3,4,5])
.map(
function(value){
if(value == 3){
throw new Error("Value cannot be 3");
}
return value;
});
observable.subscribe(
function(value){
console.log("onNext " + value);
},
function(error){
console.log("Error: " + error.message);
},
function(){
console.log("Completed!");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.6/rx.all.js"></script>
我想以非 Rx 方式做的事情:
var items = [0,1,2,3,4,5];
for (var item in items){
try{
if(item == 3){
throw new Error("Value cannot be 3");
}
console.log(item);
}catch(error){
console.log("Error: " + error.message);
}
}
提前致谢
原文由 Cheborra 发布,翻译遵循 CC BY-SA 4.0 许可协议
我建议您改用
flatMap
(现在mergeMap
在 rxjs 版本 5 中),如果您不关心它们,它会让您崩溃错误。实际上,您将创建一个内部 Observable,如果发生错误,它可以被吞噬。这种方法的优点是您可以将运算符链接在一起,如果管道中的任何地方发生错误,它将自动转发到 catch 块。