在调用需要ID的另一个Observable之前无法检索用户ID - Angularfire2

时间:2016-08-22 14:37:52

标签: angular firebase firebase-realtime-database firebase-authentication angularfire2

我正在angularfire2中执行一项操作,我订阅了angularfire.auth,以便使用以下代码检索当前登录用户的用户ID:

angularfire.auth.subscribe(auth => {
      this.userId = auth.uid;
      console.log(this.userId);
  }

这可以成功运行并将uid分配给本地变量userId。

我遇到的问题是我希望执行以下代码:

let shipObservable = angularfire.database.list('/ships/' + this.userId);

    shipObservable.subscribe(
        value => {
            this.otherObservable = angularfire.database.list('/other/' + value[0].otherId);
            this.otherObservable.subscribe(value => {
                this.address = value[0].$value;
                this.number = value[1].$value;
                this.email = value[2].$value;
                this.name = value[3].$value;
                });
    }).catch((err) => console.log(err));

问题是第二段代码在我从第一个observable返回uid之前运行。我知道这些是异步操作,可能随时返回。但是我想知道有没有办法确保第二个observable在之后执行将用户ID分配给auth返回的uid。

1 个答案:

答案 0 :(得分:0)

我使用属于RXJS的switchMap operator解决了这个问题。在下面的片段中,我假设“afAuth'是对firebase auth对象和' af'的引用。是对firebase数据库对象的引用。

authState$ = afAuth.authState;
shipObservable$ = authState$.switchMap((auth) => {
    return af.list('ships/' + auth.uid);
});

要使用switchMap,您需要导入运算符:

import 'rxjs/add/operator/switchMap';