我曾经为我的angular2 http帖子设置了超时,如下所示:
this.http.post('myurl',
body, {headers: headers})
.timeout(2000, new Error('Timeout exceeded'))
.map(res => res.json())
.subscribe((stuff) => {
//Do stuff
}, (errorResponse: any) => {
//Manage error
});
但是对于最新版本的Rjxs(5.0.1),这不再有效。
超时需要一个Observable作为第一个参数,并且不接受" new Error",我该怎么做/写那个?
请您提前寻求帮助
注意:当我删除"新错误(...)"时,我的代码有效,但在运行时,我将面临以下错误
错误:未捕获(在承诺中):TypeError:_this.http.post(...)。timeout 不是函数TypeError:_this.http.post(...)。timeout不是 功能
答案 0 :(得分:10)
知道了,我必须包括以下内容:
import 'rxjs/add/operator/timeout';
this.http.post('myurl',
body, {headers: headers})
.timeout(2000)
.map(res => res.json())
.subscribe((stuff) => {
//Do stuff
}, (errorResponse: any) => {
//Manage error
});
****** Angular的更新> = 4.3和Rxjs> = 5.2.2 ******
随着RXJS 5.2的引入,timeout
运算符可以使用新引入的pipe
来完成。此外,将其作为可调运算符导入可能会减小包大小(如果所有使用的运算符都将导入为lettable)。
Angular 4.3引入HttpClientModule
,它会在某些时候取代HttpModule
。
因此这里更新了代码:
import {timeout} from 'rxjs/operators/timeout';
let headers: HttpHeaders = new HttpHeaders();
headers.append('Content-Type', 'application/json');
let body = {something: 'my_value'};
this.http.post('myurl',
body, {headers: headers})
.pipe(
timeout(2000)
)
.subscribe((stuff: any) => {
//Do stuff
}, (errorResponse: HttpErrorResponse) => {
//Manage error
});
****** Rxjs的更新> = 6 ******
上述代码在Rxjs v6中仍然可以正常工作,但import
或timeout
管道应该修改如下:
import {timeout} from 'rxjs/operators';
// same as above
答案 1 :(得分:0)
是您需要导入
import 'rxjs/add/operator/timeout';
Fyi,如果您需要,还有其他包可以导入
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/timeout';
...