我有以下方法:
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请求时,我收到了这样的错误:
[at-loader]中的错误./src/app/auth/intercept/auth.interceptor.ts:18:16 TS2345:类型的参数&#39;(res:any)=&gt;空隙&#39;不能分配给&#39;类型的参数(值:any,index:number)=&gt; ObservableInput&LT; {}&GT;&#39 ;. 键入&#39; void&#39;不能分配给&#39; ObservableInput&lt; {}&gt;&#39;。
如何正确链接此请求? FlatMap是否链接.map()和.error()方法?我可以用这种方式链接请求吗?因为我需要从我的请求方法(它的自定义Http实现)返回Observable来让用户.subscribe这个。
答案 0 :(得分:3)
.flatMap((res) => {
if (!(res.json().data.error) && !(res.error)) {
console.log("addedHeaders");
this.addAuthHeader();
console.log(this.customOptions);
}
您的if语句未返回可观察对象。你应该在这里返回一些可观察的内容。