Angular 2 Http timeout

Igor Janković picture Igor Janković · Jan 4, 2017 · Viewed 9.9k times · Source

I have a problem posting a custom error message on HTTP timeout.

Here is the simple example:

return this._http.get(url).timeout(5000, new Error("Error message"));

I saw that everybody uses new Error("Error message") but I'm getting the error:

Error function expects type Scheduler. I'm getting this error: Argument of type 'Error' is not assignable to parameter of type 'Scheduler'. Property 'SchedulerAction' is missing in type 'Error'

Answer

cortopy picture cortopy · Feb 21, 2017

In rxjs 4, it was possible to customise the error message that way. However, in latest versions of rxjs 5, timeout only accepts two arguments:

  • due: number | Date
  • scheduler: IScheduler (this is to manage how the Observable processes the timeout)

If you want to customise your error, you may try something like:

return this._http.get(url)
 .timeout(5000)
 .catch(err => {

   if (err.name !== "TimeoutError") {
      return Observable.throw("Timeout has occurred");
   }

   return Observable.throw(err);

});