3 votes

ConcatMap interrompu en cas d'erreur dans un observable

J'ai ajouté mon code ci-dessous

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

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

Ici, si setdata génère une erreur pour un nœud intermédiaire, la séquence suivante de nœuds n'est pas reprise. Comment pouvons-nous le modifier pour que même en cas d'erreur pour un nœud, la séquence suivante de nœuds soit exécutée. J'ai lu des informations sur 'onerrorResumeNext' mais je ne suis pas sûr de savoir comment l'utiliser ici. Toute aide sera la bienvenue.

la fonction setdata() est telle que :

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

7voto

cartant Points 35253

Si setData renvoie un observable, vous pouvez utiliser la méthode catch de l'opérateur. Il recevra toutes les erreurs provenant de l'intérieur de setData et si vous renvoyez un observable vide, concatMap passera au nœud suivant dans la séquence :

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++; });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X