这段代码给了我一个奇怪的例外:
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来说相当新。
答案 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
类型。
_isScalar
是Observable
类中的属性,Subscription
类中不存在该属性。这是编译器确定两个Object类型(期望返回Object和实际返回Object)是否相互匹配的一种方法。