【发布时间】:2021-10-18 04:56:09
【问题描述】:
somefunction(){
isUserLoggedin(): boolean {
this.isUserInDB().subscribe((result: any) => {
if (result.code === 200) {
return true;
}
});
return false;
}
isUserInDB():此 API 从本地存储中获取令牌,如果用户存在于 DB 中,则返回 200;如果用户不存在于 DB 中,则返回 404(有人试图尝试他/她自己的令牌。)
在这种情况下,我总是得到 false 我知道,因为首先执行 return false,然后调用 subscribe 方法。所以我想知道是否存在任何其他方式或者我只是在做一些额外的事情?
【问题讨论】:
-
订阅是异步的。应用程序不知道 observable 何时会发出它的值。所以没有办法从订阅中同步返回值。换句话说,您需要在需要响应的地方订阅。
-
isUserLoggedin 缺少 .pipe(first()) 因此订阅会在每次调用时自行销毁,否则如果您第二次调用 isUserLoggedin,订阅将触发 2 次,依此类推。您正在累积订阅
标签: angular typescript promise rxjs-observables