我订阅了this.userService.current,但有时可能需要一些时间才能从数据库中检索,所以当调用数据库来检索加载时我会测试用户是否是运营商,它会在this.user.carrier上抛出null。在调用数据库以检索加载集合之前,如何等待this.user解析。
this.userService.currentUser.subscribe(user=>{
this.user = user;
});
this.status$ = new BehaviorSubject("Active");
this.loads$ = this.status$.switchMap(status =>
afs.collection<Load>('loads', ref => {
if(this.user.carrier){
ref.where('carrier','==', this.user.carrier.id)
}
ref.where('status', '==', status)
return ref
}).valueChanges());
答案 0 :(得分:0)
在可观察或承诺完成后需要执行的任何事情都必须使用subscribe或then方法。
this.userService.currentUser.subscribe(user=>{
this.user = user;
this.status$ = new BehaviorSubject("Active");
this.loads$ = this.status$.switchMap(status =>
afs.collection<Load>('loads', ref => {
if(this.user.carrier){
ref.where('carrier','==', this.user.carrier.id)
}
ref.where('status', '==', status)
return ref
}).valueChanges());
});
答案 1 :(得分:0)
observable上的订阅的第一个参数是每次来自您的observable的新值时执行的函数。所以这里的重点是在这个函数中做你的东西,而不是像你的例子那样在外面。
看起来像这样:
this.userService.currentUser.subscribe(user=>{
this.user = user;
this.status$ = new BehaviorSubject("Active");
this.loads$ = this.status$.switchMap(status =>
afs.collection<Load>('loads', ref => {
if(this.user.carrier){
ref.where('carrier','==', this.user.carrier.id)
}
ref.where('status', '==', status)
return ref
}).valueChanges());
});