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

时间:2017-08-30 14:05:38

标签: angular firebase angularfire2

我的数据结构是:

users
 KEYnjkhkugl
    uid: JHKJGHKJUYKJAHN
 KEYkjbjhnjs
    uid: UKHUFJGHGBHKTDD

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

  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下遇到编译错误

  

任何[]

类型都不存在属性$ key

1 个答案:

答案 0 :(得分:0)

您使用订阅的方式不起作用。但要回答你的问题,请使用firebase sdk:

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

您不能使用subscribe来填充变量,因为subscribe中的函数称为async。你这样做的方式如下:
1.让userKey; // userKey未定义
2. const用户$ = ... //没有效果
3. user $ .subscribe(...); //开始调用firebase
4. return userKey; //返回undefined
5. obj =&gt; userKey = obj。$ key //现在,userKey将被分配密钥,但是要迟到了

所以订阅你可以调用函数的observable:

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