web-dev-qa-db-ja.com

コンポーネントメソッドでAngular 4)で同期呼び出しを行う方法

Angular 4ログインアプリケーションがあります。login.cmponent.tsファイルにアクセスロジックを記述し、login.service.tsファイルにアクセスして認証サービスを再度呼び出します。

ログインコンポーネントから認証メソッドを呼び出すと、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());

}

コードは正常に機能しています。しかし、checkIfLoginSuccessfull()の実行が終了した瞬間に結果を取得したいと思います。私はメソッドを実行または呼び出していないことを知っています(Observablesは正しく)。

助けてください。 :)

3
Aakash Kumar

これを囲む必要があります

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

「Observable.create」に。

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

その後

this.authService.attemptAuth(credentials).subscribe(...);
5