0
我有以下方法:角2个rxjs FlatMap错误
request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> {
this.customOptions = options;
return this.authService.approveTokenExpiration()
.flatMap((res) => {
if (!(res.json().data.error) && !(res.error)) {
console.log("addedHeaders");
this.addAuthHeader();
console.log(this.customOptions);
} else {
// return this.authService.refreshToken()
// .flatMap(() => {
// this.addAuthHeader();
// return super.request(url, this.customOptions);
// });
}
})
.flatMap(res => {
return super.request(url, this.customOptions);
});
}
和approveTokenExpiration方法:
public approveTokenExpiration(): Observable<any> {
let header = new Headers();
header.append('Authorization', this.formTokenHeaderValue());
console.log(header);
let options = new RequestOptions({headers: header});
return this.http.get(Constants.SERVER_URL, options)
.map(res => {
return res;
})
.catch(err => {
return err;
});
}
我得到这样的错误,当我试图链我rxjs请求:
ERROR in [at-loader] ./src/app/auth/intercept/auth.interceptor.ts:18:16 TS2345:类型'(res:any)=> void'的参数不是assig nable参数的类型'(值:任何,索引:数量)=> ObservableInput < {}>'。 类型'void'不可分配为键入'ObservableInput < {}>'。
如何正确链接此请求? FlatMap是否链接.map()和.error()方法?我可以用这种方式链接请求吗?因为我需要从我的请求方法(它的自定义Http实现)返回Observable以让用户在此订阅。
或者如果您需要对流进行一些计算,则使用.map运算符。如果预计会产生副作用(如在流本身之外添加头),则可以使用do操作符 – LookForAngular