Dans Angular2, comment intercepter la réponse d'erreur à partir d'observable et la transmettre au canal d'erreur

J'ai un service qui interagit avec un serveur d'api. Il a myHttpPost(données) de la méthode. Cette méthode doit:

  1. appel Angulaire du http.post au serveur
  2. si la réponse a 200, fournir la réponse du contenu json à l'abonné
  3. si la réponse a statut différent, le processus de la réponse et de fournir des traités d'erreur à l'abonné

La version actuelle de ma méthode est la suivante:

postData(path: string, data: Object): Rx.Observable<any> {
    let json = JSON.stringify(data);
    return this.http.post(path, json)
        .map(res => res.json())
}

Ce n'est pas le point 3 de la liste ci-dessus, parce que la carte est appelée uniquement en cas de succès, et non sur l'erreur. Que je puisse changer la séquence en ajoutant:

.catch(error => {
    let myError = prepareErrorContent(error);
    return Rx.Observable.throw(myError);
});

Puis l'abonné (un autre service) reçoit myError (c'est ok) mais le rxjs documentation est dit ce qui suit au sujet de catch() méthode: "Continue d'observer une séquence qui se termine par une exception à la prochaine observables séquence". Mais je veux la séquence de mettre fin normalement et de ne pas poursuivre. Si j'utilise le catch() comme ci-dessus, alors le prochain appel à postData() de l'abonné ne fonctionne pas (il retourne la même erreur au lieu de faire un appel http). Je pense que c'est parce que la séquence n'est pas terminée.

Comment faire?

[Modifier]
C'est mon abonné méthode qui utilise ce service:

 this.jsonHttp.postData(path, data)
    .subscribe(
        struct => onNext(struct),
        error => {
            let message = this.jsonHttp.extractError(error);
            onError(message)
        },
        () => onComplete ? onComplete() : null
    );

source d'informationauteur camcam