2017-11-21 9 views
0

このコードは、私に奇妙な例外を与えている:なぜこのリクエストは_isScalar例外を出していますか?

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'.誰もがこのエラーの原因を知っていますか?私は角2よりもむしろ新しいです。

答えて

1

Observableを返却したい場合は、そこに登録しないでください。 subscribe()の代わりにmap()を使用してください。

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); 
     } 

その後、EDIT

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

次のように呼び出し側コンポーネントから購読することができます。 基本的にエラーがすべての型の不一致についてです。 Observable<number>はタイプSubscriptionではありません。

_isScalarは、Subscriptionクラス内に存在しないクラスObservable内のプロパティです。これは、2つのObject型(期待されるObjectと実際のreturn Object)が互いに一致するかどうかをコンパイラが判断する方法の1つです。

+0

私はどのように観測値を返すのですか?サブスクライブ部分を削除した場合、戻り値の型がObservableなので、レスポンスオブジェクトを返すことができないという文句があります。 – Maurice

+0

@Mauriceいくつかの説明を追加しました。チェックしてください。 –

関連する問題