2017-09-28 2 views
1

J'ai un observable dans Angular 4 qui observe une entrée et quand détecter un appel d'url un service qui lance une demande de xhr.Angulaire 4. Erreur dans la requête XHR arrête une observable chaînée

Observable.fromEvent(this._elementRef.nativeElement, 'input') 
    .debounceTime(500) 
    .map((res: any) => { return res.target.value }) 
    .distinctUntilChanged() 
    .map((res: string) => String(res.match(this.regExpUrl))) 
    .distinctUntilChanged() 
    .filter(res => res ? true : false) 
    .switchMap(this.serviceThatReturnAObservableOfAXHRRequest)) 
    .subscribe(response => console.log(response), 
    err => console.log(err)); 

Lorsque le XHR retour de 200 l'observable des entrées continuer à travailler et je peux être en mesure d'écrire d'autres url dans l'entrée, mais quand renvoie une erreur l'observable de l'entrée arrête de travailler et si j'écris certains dans l'entrée ne passent jamais à travers l'observable à nouveau.

Une idée pourquoi l'erreur lancée par la demande et attrapé dans l'abonnement pourrait être briser l'observable de l'entrée et quand est un succès non?

Répondre

0

C'est le comportement correct. Vous pouvez utiliser par exemple catch(() => Observable.of()) pour simplement ignorer l'erreur ou catch(err => Observable.of(err)) pour le transformer en un article next ou retry() pour vous réabonner automatiquement à la source Observable.

Depuis que vous utilisez Angular le service http tourne automatiquement toutes les erreurs non 2XX automatiquement.

question similaires:

+0

J'utilise une prise pour traiter l'erreur et une nouvelle tentative de re-et je l'ai Abonnez eu le comportement attendu. Merci. –