根据 Angular 中订阅的返回数据为变量赋值。 (可能吗 ?)

Assign value to the variable based on returning data from the subscribe in Angular . (Is it possible ?)

somefunction(){
    isUserLoggedin(): boolean {
        this.isUserInDB().subscribe((result: any) => {
          if (result.code === 200) {
            return true;
          }
        });
      return false;
  }

isUserInDB():此 API 从本地存储获取令牌,如果用户存在于数据库中则 returns 200 或如果用户存在 returns 404数据库中不存在(有人正在尝试 his/her 自己的令牌。)

在此我总是得到 false 我知道因为首先执行 return false 然后调用 subscribe 方法。所以我想知道是否存在任何其他方式,或者我只是做了一些额外的事情?

因为 this.isUserInDB() 是异步的 isUserLoggedin 将始终 return false。你可以做的是 return observable 而不是布尔值,并在你调用这个函数的地方处理它:

isUserLoggedin(): Observable<any> { // replace any with your type
    return this.isUserInDB();
}

如果您想根据用户登录执行一些逻辑,您可以订阅此功能并执行您的任务:

isUserLoggedIn.subscribe((result: any) => {
          if (result.code === 200) {
             // Your code
          }

理想情况下,在您的登录流程中,您应该将用户的登录状态存储在某些服务中 return 相同。

定义class的一个属性并初始化为false:

isUserInDb = false

创建组件时,如果结果状态为成功,则将 属性 更改为 true:

ngOnInit() {
    this.isUserInDB().subscribe((result: any) => {
        if (result.code === 200) {
            this.isUserInDb = true;
        }
    });
}

我对此的看法是同步它,感谢 async/await

async isUserLoggedin(): Promise<boolean> {
   const result = await this.isUserInDB().pipe(first()).toPromise();

   if (result.code === 200) {
      return true;
   } else {
      return false;
   }
}

用法:

async somefunction(): Promise<void> {
    const logged = await this.isUserLoggedin();
}