Angular 2 Http超时

时间:2017-01-04 14:02:25

标签: angular angular2-http

我在HTTP超时时发布自定义错误消息时遇到问题。

以下是一个简单的例子:

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

我看到每个人都使用新错误(“错误消息”),但我收到错误:

  

错误函数需要类型Scheduler。我收到这个错误:   “错误”类型的参数不能分配给类型的参数   “调度”。 “错误”

类型中缺少属性“SchedulerAction”

4 个答案:

答案 0 :(得分:9)

在rxjs 4中,可以通过这种方式自定义错误消息。但是,在最新版本的rxjs 5中,timeout只接受两个参数:

  • due:number |日期
  • scheduler:IScheduler(这是为了管理Observable处理超时的方式)

如果您想自定义错误,可以尝试以下方法:

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

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

   return Observable.throw(err);

});

答案 1 :(得分:2)

您应该可以使用timeoutWith

执行此操作
return this._http.get(url).timeoutWith(5000, Observable.throw(new Error("Error message")));

答案 2 :(得分:0)

从版本rc.5开始,超时不再接受errorToSend参数。

https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md#500-rc5-2016-12-07

答案 3 :(得分:0)

你可以使用 (rxjs 6.6.3)

import { timeoutWith } from 'rxjs/operators'
import { throwError } from 'rxjs'
// ...
return this.http.get(url).pipe(timeoutWith(5000, throwError(new Error("Error message"))))
// ...