当一个可观察对象出错时 ConcatMap 中断

ConcatMap interupted when error in one observable

我有以下代码:

Observable.from(modifiedNodes)
    .concatMap(node => {
        return this.Model.setData(node);
    })
    .subscribe(() => {
        NodeSaved++;
    }

如果setData 对任何中间节点抛出错误,则不会恢复下一个节点序列。我们如何修改它,以便即使一个节点出现错误,也会执行下一个节点序列?我读到了 onErrorResumeNext,但我不确定如何在这里使用它。

setData的方法签名如下:

public setData(node: INode): Observable<Object>{}

如果 setData return 是一个可观察对象,您可以使用 catch 运算符。它会收到从 setData 中抛出的任何错误,如果你 return 一个空的可观察对象,concatMap 将移动到序列中的下一个节点:

import 'rxjs/add/observable/empty';
import 'rxjs/add/operator/catch';

Observable
  .from(modifiedNodes)
  .concatMap(node => this.Model
    .setData(node)
    .catch(error => Observable.empty())
  )
  .subscribe(() => { NodeSaved++; });