是否可以在发布请求中超时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')
);
答案 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')
);