2016-08-17 5 views
4

Je souhaite fournir des commentaires à l'utilisateur si un événement de délai d'attente se produit sur un appel HTTP.Rappel de délai d'attente 2 rxjs angulaire

J'ai essayé ceci:

return this._http 
       .post(apiUrl + 'Search/Everything', params, {withCredentials: true, headers: this.headers}) 
       .timeout(5000, this._feedbackService.error("Custom error message")) 
       .map((response: Response) => response.json().data); 

Mais que le service des incendies de retour dès que l'appel HTTP est fait.

Comment puis-je déclencher le service lorsque le délai d'attente se déclenche?

Répondre

5

En supposant _feedbackService.error retourne un Error, vous devriez être en mesure de faire ce que vous avez besoin avec les timeoutWith et defer opérateurs:

import "rxjs/add/observable‌​/defer"; 
import "rxjs/add/observable‌​/throw"; 
import "rxjs/add/operator/timeoutWith"; 
import { Observable } from "rxjs/Observable‌​"; 

return this._http 
    .post(apiUrl + 'Search/Everything', params, {withCredentials: true, headers: this.headers}) 
    .timeoutWith(5000, Observable.defer(() => Observable.throw(this._feedbackService.error("Custom error message")))) 
    .map((response: Response) => response.json().data); 
+0

Désolé. J'ai répondu à cela et j'ai réalisé que j'aurais mal interprété la question. J'ai mis à jour la réponse. – cartant

+0

Que dois-je importer en plus de 'rxjs/add/operator/timeoutWith' pour que cela fonctionne? (la partie "Rx." qui est). –

+0

Vous aurez besoin de 'import 'rxjs/add/observable/defer" 'et' import "rxjs/add/observable/throw" 'aussi. – cartant