为什么这个get请求给出_isScalar异常?

时间:2017-11-21 15:33:19

标签: angular

这段代码给了我一个奇怪的例外:

  calculateLeave(username:string, password:string): Observable<number> {
    let params = new URLSearchParams();
    params.append("username", username);
    params.append("password", password);
    return this.http.get("api/calculateleave", {params: params}).subscribe(res => res.json() as number);//this.http.get(this.apiPostUrl, {params: params}).toPromise().then(res => res.json() as Account)
  }

例外:Type Subscription is not assignable to type Observable<number>. Property _isScalar is missing in type 'subscription'.有谁知道导致此错误的原因是什么?我&#39;对Angular 2来说相当新。

1 个答案:

答案 0 :(得分:1)

如果您希望返回Observable,请不要在那里订阅。使用map()代替subscribe()

map()将返回Observable

subscribe()会返回Subscription

calculateLeave(username:string, password:string): Observable<number> {
        let params = new URLSearchParams();
        params.append("username", username);
        params.append("password", password);
        return this.http.get("api/calculateleave", {params: params}).map(res => res.json() as number);
      }

然后您可以通过以下方式从调用者组件订阅

calculateLeave('user', 'user').subscribe(data => console.log(data));

编辑:  基本上错误都与类型不匹配有关。 Observable<number>不属于Subscription类型。

_isScalarObservable类中的属性,Subscription类中不存在该属性。这是编译器确定两个Object类型(期望返回Object和实际返回Object)是否相互匹配的一种方法。