Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular 2 rxjs timeout callback

I want to provide feedback to the user if a timeout event on a HTTP call happens.

I tried this:

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

But that fires the feedback service as soon as the HTTP call is made.

How do I fire the service when the timeout kicks in?

like image 498
Glenn Utter Avatar asked Aug 17 '16 07:08

Glenn Utter


1 Answers

Assuming _feedbackService.error returns an Error, you should be able to do what you need with the timeoutWith and defer operators:

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);
like image 76
cartant Avatar answered Nov 15 '22 04:11

cartant