Angular4:使用HTTP拦截器+RxJS超时操作错误
Angular 4: Using HTTP interceptor + RxJS timeout operator error
我正在尝试为使用 HttpClient 执行的每个 HTTP 请求设置 10 秒的默认超时。我有一个拦截器可以向 header 添加一些值,我读过要设置超时你必须使用 'timeout' RxJS 运算符,如下所示:
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { timeout } from 'rxjs/operators/timeout';
@Injectable()
export class APIInterceptor implements HttpInterceptor {
constructor() {
}
intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// NOTE: The following 'authToken' and 'user_id' values are obtained through a global service
const authReq = req.clone({
headers: new HttpHeaders ({
'Content-Type': 'application/json',
'X_TOKEN_AUTH': authToken,
'X_IDUSER': user_id
})
});
const API_TIMEOUT = 10000;
//console.log('HEADER: ', authReq)
return next.handle(authReq).timeout(API_TIMEOUT); // Set a timeout for the requests
}
}
在添加超时功能之前,一切正常,headers 被注入了授权令牌和用户 ID。但是,现在我收到以下错误:
next.handle(...).timeout is not a function
我是不是做错了什么?谢谢!
如果您想使用运算符的 "patch" 风格,您需要从 rxjs/add/operator/*
:
导入它
import 'rxjs/add/operator/timeout';
使用pipe()
时使用'rxjs/operators/timeout'
方法。
我正在尝试为使用 HttpClient 执行的每个 HTTP 请求设置 10 秒的默认超时。我有一个拦截器可以向 header 添加一些值,我读过要设置超时你必须使用 'timeout' RxJS 运算符,如下所示:
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { timeout } from 'rxjs/operators/timeout';
@Injectable()
export class APIInterceptor implements HttpInterceptor {
constructor() {
}
intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// NOTE: The following 'authToken' and 'user_id' values are obtained through a global service
const authReq = req.clone({
headers: new HttpHeaders ({
'Content-Type': 'application/json',
'X_TOKEN_AUTH': authToken,
'X_IDUSER': user_id
})
});
const API_TIMEOUT = 10000;
//console.log('HEADER: ', authReq)
return next.handle(authReq).timeout(API_TIMEOUT); // Set a timeout for the requests
}
}
在添加超时功能之前,一切正常,headers 被注入了授权令牌和用户 ID。但是,现在我收到以下错误:
next.handle(...).timeout is not a function
我是不是做错了什么?谢谢!
如果您想使用运算符的 "patch" 风格,您需要从 rxjs/add/operator/*
:
import 'rxjs/add/operator/timeout';
使用pipe()
时使用'rxjs/operators/timeout'
方法。