2017-09-28 1 views
1

J'essaie de créer un service qui gère les erreurs techniques, mais je suis confronté à un problème. Le type de changement de l'article retourné si je fais un hic:Typescript - Changement de type de réponse observable si j'appelle catch

Observable.of(1, 2, 3).subscribe(
    item => {}, // item type is number 
    error => {} 
); 

Observable.of(1, 2, 3).catch(error => { 
    // do something 
    throw error; 
}).subscribe(
    item => {}, // item type is number | {} 
    error => {} 
); 

est-il un moyen de garder le type d'élément que seul un nombre lors de la capture d'une observable?

Contexte: Je suis en train de partager la poignée de services web throught services multiples:

  • WepAPI.Service traitera une erreur technique (404, 500, ...)
  • ComponentRelated.Service manipulera processus fonctionnel et erreur
  • Component va gérer la transformation des données spécifiques à l'interface utilisateur

Peut-être que je ne suis pas ce faire de la bonne façon, des conseils/l'échantillon serait apprécié.

Remerciez

Répondre

1

Vérifier this

Souvenez-vous de retourner une observable de la fonction de capture

Ne jetez pas une erreur dans la fonction d'erreur, le but de la .catch est pour fournir une valeur de repli sans casser le flux. ce fallback doit être un autre observable (alors que vous aurez toujours le contenu de l'observable sur le premier argument de l'abonnement).

Observable.of(1, 2, 3).catch(error => { 
    const fallbackValue: number = 42; 
    Rx.Observable.of(fallbackValue); 
}).subscribe(
    item => {}, // item type is number 
    error => {} 
);