我有一个“新行程”表单,用户可以在其中填写参与者的姓名,然后提交表单以创建行程。
提交时,我使用名称查询 Firebase 数据库,以获取参与者 (/users) 的 ID。然后,我将 ID 添加到行程对象的 participantsID
字段,然后将新行程推送到 Firebase。
问题是 Firebase 查询是异步的并返回一个 Observable,因此我的函数将在 Observable 完成之前继续推送对象,因此新对象的 participantsID 字段为空。
是否有任何方法可以等待可观察对象完成(以一种同步方式)以便我可以操作数据然后继续?到目前为止,我解决这个问题的所有尝试都失败了。
这是我的简单代码。
getUserByAttribute(attribute, value) {
return this.db.list('/users', {
query: {
orderByChild: attribute,
equalTo: value,
limitToFirst: 1
}
});
}
createTrip(trip) {
for(let name in participantsName.split(',')) {
getUserByAttribute('username', name)
.subscribe( user => trip.participantsID.push(user[0].$key) );
}
this.db.list('/trips').push(trip);
}
最佳答案
您可以通过执行 forkJoin
Observable
createTrip(trip) {
var observableArray: any = participantsName.split(',')
.switchMap((name)=> getUserByAttribute('username', name))
Observable.forkJoin(observableArray).subscribe(
trips => trips.forEach((trip) => {
this.db.list('/trips').push(trip);
})
);
}
关于javascript - 等待 Observable 完成以提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968852/