将变量设置为异步函数中的值

Set a variable to a value inside asynchronous function

首先我知道不能那样做,因为你不能在异步函数中初始化变量。

但是我需要你们帮我改正。

在这个例子中,我有一个可观察对象,我想return它是可变的,并在其他函数中使用它

    id:string;
    constructor(){
      this.user$.subscribe(data=>{
      this.id = data.uid})
      console.log(this.id) //undefined
}

I know this is wrong but i don't know the correct way to do it.

例如我需要这里的用户id!但因为它是未定义的,所以我得到错误

 getCat() :Observable<boolean>{
      return this.afs.collection('users').doc(this.id).collection('categories').get().pipe(
        map(data => {
          if(data.size > 0){
            return true
          }else{
            return false
          }
        })
      )
  }

应该在用户可观察对象的订阅中调用 getCat 函数,我的意思是在获取用户 ID 之后。

this.user$.subscribe(data=>{

      this.id = data ? data.uid : null;
      console.log(this.id); //should have a value
      this.getCat() // just call the function here 
});