2017-12-14 7 views
0

私はAngularで作業を始めていますが、私はかなり簡単な質問があります。角度5 HttpClientが値を返す前に戻る

私はngx-rocketツールを使って作成したthisスタータープロジェクトを使用しています。私はwebapiを使用して認証を実装しようとしています。私はこのサービス(see original code)について話しています。

HTTPモジュールとして私は新しいもの(import { HttpClient } from '@angular/common/http';)を使用しています。そして私はこれに、上記サービスのlogin方法を変更:

login(context: LoginContext): Observable<Credentials> { 

    return this._http.post<Credentials>("/api/account/login", 
     {Email : context.username,Password:context.password});   
    } 

httpリクエストが発生し、正常に戻ります。私の問題:ご覧のとおり、this.setCredentials(data, context.remember);を使って資格情報を設定する必要があります。私に混乱を招くのは、観測可能なものを返す方法と、同じ方法で資格を設定することです。返されたobservableを変数に保存して、それをサブスクライブしてデータを設定して戻しましたが、データを設定する前に戻ります(非同期であることがわかります)。

これは私には紛らわしいものですが、これはAngularにとってはかなり基本的ですが、それでも私を混乱させます。この方法を変更して適切な返品を行い、クレデンシャルを設定するにはどうすればよいですか?任意のヘルプ

答えて

2

ため

おかげで、あなたは賃貸可能tapdo)演算子を使用して、まだ、観察を返すことができpipe

login(context: LoginContext): Observable<Credentials> { 
    return this._http.post<Credentials>("/api/account/login", {Email : context.username,Password:context.password}) 
       .pipe(
        tap(data => { 
         this.setCredentials(data, context.remember); 
        }) 
       ); 
} 
+0

あなたの答えをありがとう! TSは私に与えている:名前 'タップ'を見つけることができません。それを持つために私は何をインポートすべきですか? –

+0

'rxjs/operators 'から' import {tap}'; ' – ArunDhaJ

+0

ありがとうございました! –

1

を使用してみてください。

私があなたが戻ってきた、または渡したいことがわからないため、操作がコメントアウトされています。

setCredentialsのアクションに基づいて異なるものを返す場合は、mapを代わりに使用し、メソッドから何かを戻します。

+0

あなたの答えをありがとう!それも同様です! –

関連する問題