Angular 2 rxjs FlatMap错误

时间:2017-06-25 17:41:09

标签: 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) && !(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这个。

1 个答案:

答案 0 :(得分:3)

.flatMap((res) => {
    if (!(res.json().data.error) && !(res.error)) {
      console.log("addedHeaders");
      this.addAuthHeader();
      console.log(this.customOptions);
    } 

您的if语句未返回可观察对象。你应该在这里返回一些可观察的内容。