http post请求中的Angular2超时

时间:2016-03-03 18:04:12

标签: http post angular

是否可以在发布请求中超时3秒?怎么样?

我目前的代码

this.http.post('myUrl', 
    MyData, {headers: Myheaders})
        .map(res => res.json())
        .subscribe(
            data => this.ret = data,
            error => console.debug('ERROR', error),
            () => console.log('END')
        );

3 个答案:

答案 0 :(得分:35)

您可以像这样使用timeout运算符:

this.http.post('myUrl', 
        MyData, {headers: Myheaders})
         .timeout(3000, new Error('timeout exceeded'))
         .map(res => res.json())
         .subscribe(
           data => this.ret = data,
           error => console.debug('ERROR', error),
           () => console.log('END')
         );

答案 1 :(得分:19)

您可能需要像这样导入超时

import 'rxjs/add/operator/timeout'

如果没有rxjs 5.0.1和角度2.3.1

,我无法让它工作

编辑2018年4月20日

请不要以这种方式导入运营商,在rxjs +5.5中你可以导入这样的运营商

import { timeout } from 'rxjs/operators/timeout';
// Use it like so
stream$.pipe(timeout(3000))

请查看this文档,该文档深入解释了可管道操作员。

答案 2 :(得分:12)

我修改了Thierry的答案,以使其与最新版本一起使用。有必要删除超时功能的第二个参数。根据有关angular-cli问题的讨论,超时函数现在总是抛出TimeoutError。

this.http.post('myUrl', 
    MyData, {headers: Myheaders})
     .timeout(3000)
     .map(res => res.json())
     .subscribe(
       data => this.ret = data,
       error => console.debug('ERROR', error),
       () => console.log('END')
     );
相关问题