订阅 FirebaseListObservable - 属性 $key 在类型 any[] 上不存在

Subscribing to FirebaseListObservable - property $key does not exist on type any[]

我的数据结构是:

users
 KEYnjkhkugl
    uid: JHKJGHKJUYKJAHN
 KEYkjbjhnjs
    uid: UKHUFJGHGBHKTDD

现在我需要获取一个 $key,当我只知道 uid 时由 Firebase 生成。所以我这样做:

  getUserKeyFromUid(uid:string) : string {
    let userKey;
    const user$ = this.afDb.list('users', {
      query: {
        orderByChild: 'uid',
        equalTo: uid
      }  
    })
      .do(console.log);
    user$.subscribe(obj => userKey = obj.$key);
    return userKey;
  }

我认为它运行良好,但我不明白为什么如果我删除 .do(console.log); 我在 $key 下会出现编译错误

Property $key does not exist on type any[]

你订阅的方式不对。但要回答您的问题,请像这样使用 firebase sdk:

getUserKeyFromUid(uid:string) : Observable<string> {
   return this.afDb.object('users/' + uid)
              .do(console.log);
}

不能用subscribe填充变量,因为subscribe中的函数叫async。你这样做的方式如下:
1.让用户密钥; // 用户密钥未定义
2. const user$ = ... // 无效
3. 用户$.订阅(...); // 开始调用 firebase
4. return 用户密钥; // return未定义
5. obj => userKey = obj.$key // 现在,userKey 将被分配密钥,但已经晚了

所以在调用函数的地方订阅可观察对象:

... {
 const userKey$ = getUserKeyFromUid(uid);
 userKey$.subscribe();
}