角度2 rxjs平面图误差

角度2 rxjs平面图误差,rxjs,angular2-services,Rxjs,Angular2 Services,我有以下方法: request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> { this.customOptions = options; return this.authService.approveTokenExpiration() .flatMap((res) => { if (!(res.json().data.error)

我有以下方法:

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);
      });
  }
request(url:string | request,options?:RequestOptionsArgs):可观察{
this.customOptions=选项;
返回此.authService.ApproveTokenExhilation()
.flatMap((分辨率)=>{
if(!(res.json().data.error)和&!(res.error)){
控制台日志(“添加的标题”);
this.addAuthHeader();
console.log(this.customOptions);
}否则{
//返回此.authService.refreshToken()
//.flatMap(()=>{
//this.addAuthHeader();
//返回super.request(url,this.customOptions);
//   });
}
})
.flatMap(res=>{
返回super.request(url,this.customOptions);
});
}
和批准的排放方法:

  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;
      });
  }
public approvedokenexpiration():可见{
let header=新的Headers();
header.append('Authorization',this.formTokenHeaderValue());
console.log(头文件);
let options=newrequestoptions({headers:header});
返回此.http.get(Constants.SERVER\u URL,选项)
.map(res=>{
返回res;
})
.catch(错误=>{
返回错误;
});
}
当我尝试链接我的rxjs请求时,我遇到了这样的错误:

[at loader]中出错/src/app/auth/intercept/auth.interceptor.ts:18:16 TS2345:类型为“(res:any)=>void”的参数不可分配给类型为“(值:any,索引:number)=>ObservableInput”的参数。 类型“void”不可分配给类型“ObservableInput”

如何正确链接此请求?FlatMap是否同时链接.map()和.error()方法?我可以用这种方式链接请求吗?因为我需要从我的请求方法(其自定义Http实现)返回Observable,以允许用户订阅

.flatMap((res) => {
    if (!(res.json().data.error) && !(res.error)) {
      console.log("addedHeaders");
      this.addAuthHeader();
      console.log(this.customOptions);
    } 
您的if语句没有返回可观察的。你应该在这里返回一些可观察到的


您的if语句没有返回可观察的。您应该在此处返回一些可观察值。

如果需要对流进行一些计算,可以使用.map操作符。如果预期会有副作用(如在流本身之外添加头),则可以使用do运算符,如果需要对流进行一些计算,则可以使用.map运算符。如果预期会有副作用(如在流本身之外添加头),则可以使用do运算符