3

我有以下代码:

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

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

的方法签名setData如下:

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

1 回答 1

7

如果setData返回一个 observable,你可以使用catch操作符。它将接收从内部抛出的任何错误setData,如果您返回一个空的 observable,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++; });
于 2017-06-06T07:26:49.720 回答