ConcatMap прервался, когда ошибка в одной наблюдаемой

Я добавил свой код ниже

    `Observable.from(modifiedNodes)
                        .concatMap(node => {

                            return this.Model.setData(node);
                        })
                        .subscribe(
                        () => {
                            NodeSaved++;
                        }`

Здесь, если setdata выдает ошибку для какого-либо промежуточного узла, следующая последовательность узлов не возобновляется. Как мы можем изменить это так, что даже если ошибка для одного узла, будет выполнена следующая последовательность узлов. Я читал об 'onerrorResumeNext', но не уверен, как его использовать здесь? любая помощь будет полезна.

setdata() выглядит так:

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

1 ответ

Решение

Если setData возвращает наблюдаемое, вы можете использовать catch оператор. Он будет получать любые ошибки изнутри setData и если вы возвращаете пустую наблюдаемую, 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++; });
Другие вопросы по тегам