【问题标题】:Angular 2 Http timeoutAngular 2 Http超时
【发布时间】:2017-05-18 20:30:12
【问题描述】:

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

这是一个简单的例子:

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

我看到每个人都使用 new Error("Error message") 但我收到了错误:

错误函数需要调度程序类型。我收到此错误: “错误”类型的参数不可分配给类型参数 '调度器'。 “错误”类型中缺少属性“SchedulerAction”

【问题讨论】:

    标签: angular angular2-http


    【解决方案1】:

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

    • 到期:号码 |日期
    • 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);
    
    });
    

    【讨论】:

    • 当错误名称不是“TimeoutError”时为什么会发生超时
    【解决方案2】:

    您应该可以使用timeoutWith

    return this._http.get(url).timeoutWith(5000, Observable.throw(new Error("Error message")));
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        你可以使用(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"))))
        // ...
        

        【讨论】:

          猜你喜欢
          • 2016-10-30
          • 1970-01-01
          • 1970-01-01
          • 2018-01-01
          • 2016-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-05
          相关资源
          最近更新 更多