1

私はAngular 4ログインアプリケーションを持っています。私はlogin.cmponent.tsファイルにアクセスロジックを書いてlogin.service.tsファイルにアクセスし、login.service.tsファイルにアクセスして認証サービスを再度呼び出します。コンポーネントメソッドでAngular 4で同期呼び出しを行う方法

ログインコンポーネントからauthenticateメソッドを呼び出すと、falseが返されます。残りのコードを実行するまでには、非同期の方法でAngularランコードを知っているので、認証サービスはtrueを返します。

これは私のコードです:

ログインコンポーネント方法:

this.loginService.setLoginData(
    new LoginModel(this.userId, this.bankId, this.password) 
).checkIfLoginSuccessfull(); 

Login.service方法:

this.authService 
    .attemptAuth(credentials); 

認証サービス方法:

attemptAuth(credentials): void { 

    this.restService 
    .post('/authenticate', credentials) 
    .subscribe(
    data => this.setAuth(data.token), 
    err => this.destroy()); 

} 

コードが動作していますフィンe。しかし、私はcheckIfLoginSuccessfull()の実行が終了すると結果を得たいです。私は方法を呼んでいないことを知っている(Observablesが正しく)。

助けてください。 :)

+1

あなたは非同期から逃れることはできません。非同期呼出しを同期化することは、不可能(望ましいことではない)である。 –

+0

コールを同期させようとするのではなく、約束やオブザーバブルをどのようにつなぐかを学びます。多くのチュートリアルがあります。これは最も頻繁な質問の1つです。質問には具体的な提案をするのに十分なコードが含まれていません。 –

+0

ちょうど3レベルのメソッド呼び出しです。最後のauthServiceがコードを正しく実行しています。一度行が実行されると、最初のLoginComponentメソッドで目的の結果にアクセスできるように、それらをどのようにチェーン化できますか。 – user3095179

答えて

3

あなたが "Observable.create" には、この

this.restService 
    .post('/authenticate', credentials) 
    .subscribe(
     data => this.setAuth(data.token), 
     err => this.destroy()); 

を囲む必要があります。

Observable.create(observer => { 
    this.restService 
    .post('/authenticate', credentials) 
    .finally(f => observer.complete()) 
    .subscribe(
     data => observer(data.token) 
     err => observer.error(err); 
} 

、その後

​​
+0

これは投げているエラーです、Observerは関数ではありません。 – user3095179

+0

'attemptAuth(資格情報):Observable { this.purgeAuth(); リターンObservable.create(観察=> { this.restService.post( '/認証'、資格情報) .finally(observer.complete()) .subscribe( データ=> { オブザーバ(data.token ); はconsole.log( 'オブザーバー:' + data.token); }、 ERR => observer.error(ERR) ) }) ' – user3095179

+0

は、ページの上部にこれを追加する:インポート{観測}から "rxjs/Rx"; –

関連する問題