我正在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。
答案 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';