如何扩展Angular2的Http类以便自定义它(在Ionic2项目中)

时间:2017-02-16 00:59:10

标签: angular typescript ionic2 observable

我正在尝试为我的Ionic2-Angular2应用程序扩展Http类。 主要问题来自于从(本地|会话)存储获取一个项目,在Ionics2中返回一个Promise,我不得不将它转换为一个Observable(或者至少我认为是因为这样)使扩展与我正在扩展的类的每个函数的返回值类型。

getCustomRequest(url:string, method:string, options?: RequestOptionsArgs, body?:any):Observable<any>{
    let headers = new Headers({'Content-Type': 'application/json'});

    return Observable.fromPromise(
      this.storage.get("authToken").then(
        data => {
          console.log('Token '+data);
          headers.append("Authorization", 'Token '+data);
          return this.getNewReq({method, headers, body, url}, options);
        },
        error => {
          console.log('no token!');
          return this.getNewReq({method, headers, body, url}, options);
        }
      )
    );
  }


  private getNewReq(reqOptObject, options):Request{
    let reqOpt = new RequestOptions(reqOptObject);
    if (options) {
      reqOpt = reqOpt.merge(options);
    }
    return new Request(reqOpt);
  }

  request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> {
    return super.request(url, options);
  }


  post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>{
    return this.getCustomRequest(url, 'POST', options, body)
               .map( newReq => { console.log(newReq); return this.request(newReq); });
  }

错误消息是[line return this.getCustomRequest(url ...]:Type'Ibservable&gt;'不能分配给'Observable'类型。             'Observable'不能分配给'Response'类型。类型中缺少属性“类型”             “可观测”。

1 个答案:

答案 0 :(得分:0)

由于this.request()返回Observable,我认为您需要使用merge代替map

  post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>{
    return this.getCustomRequest(url, 'POST', options, body)
               .merge( newReq => { console.log(newReq); return this.request(newReq); });
  }