我的用例似乎很简单,但是尽管我付出了很多努力,但仍无法正常工作。
在我的角度应用程序中,我有一个登录组件,该组件仅在我的身份验证服务上调用登录方法。
我需要此登录方法来做两件事:
两次调用的结果完成后,登录方法可以返回true或false来确定成功。
我的两个调用似乎通过嵌套订阅函数而正确启动。但是login方法会在第二次调用完成之前返回其值,因为它会异步触发。
因此,在我的UI中,在第二次调用完成之前,我得到了短暂的“登录失败”,然后按预期工作。
必须有更好的方法! 我正在使用Angular 6。
private loggedIn$ = new BehaviorSubject<boolean>(this.hasToken());
public login(username: string, password: string): Observable<boolean> {
this.retrieveToken(username, password).subscribe(result => {
this.retrieveUserProfile().subscribe(result =>{
this.loggedIn$.next(true);
})
})
return this.isLoggedIn // this returns before retrieve profile is completed
}
答案 0 :(得分:0)
最重要的是,您需要使用诸如mergeMap之类的东西,而不是订阅多个可观察对象
也不会等待obserable.subribe之外的任何语句,因此(在您的情况下)结果将在分配之前返回。
您的逻辑需要类似于tihs
return this.observable1().pipe(mergeMap((param1) => {
return this.observable2().pipe(map((param1) => {
return <logged_in_Result>;
}));
}));