1

我有一个Angular 4登录应用程序。我已经在login.cmponent.ts文件中写入了访问逻辑,并访问了我的login.service.ts文件,该文件又调用了一个身份验证服务。如何在组件方法中同步调用Angular 4

当我从我的登录组件调用身份验证方法时,它返回false。当它执行剩余的代码时,认证服务返回true,因为我们知道Angular运行代码以异步的方式。

这是我的代码:

登录分量法:

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正确)。

请帮忙。 :)

+1

不能从异步逃脱。将异步调用转换为同步调用是不可能的(也是不可取的)。 –

+0

不要试图使呼叫同步,而是学习如何链接承诺和观察。有很多教程。这是最常见的问题之一。这个问题没有包含足够的代码来提出具体的建议。 –

+0

这只是3级方法调用。最后一个authService正确执行代码。我如何链接它们,以便在执行该行时,在第一个LoginComponent方法中访问所需的结果。 – user3095179

回答

3

你应该围绕这个

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(f => observer.complete()) 
    .subscribe(
     data => observer(data.token) 
     err => observer.error(err); 
} 

然后

​​
+0

这是抛出错误,Observer不是一个函数。 – user3095179

+0

'attemptAuth(credentials):Observable { this.purgeAuth(); 返回Observable.create(观察者=> { this.restService.post( '/身份验证',凭证) 。最后(observer.complete()) .subscribe( 数据=> { 观察者(data.token ); 的console.log( '观察:' + data.token); }, ERR => observer.error(ERR) ) })' – user3095179

+0

在页面的顶部添加这样的:进口{可观察} from“rxjs/Rx”; –

相关问题