javascript - 等待 Observable 完成以提交表单

标签 javascript angular firebase observable angularfire2

我有一个“新行程”表单,用户可以在其中填写参与者的姓名,然后提交表单以创建行程。 提交时,我使用名称查询 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 处理成单个 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/

相关文章:

javascript - 如何在带有 Moovweb SDK 的 Javascript 中移动 AJAX 内容?

javascript - 将不相交的力定向图放入 React 应用程序

java - Firestore 如何按我的文档中引用的另一个文档中的字段进行排序?

Gruntfile.js 中的 Javascript 变量?

javascript - 来自 MySQL 的 Node JS 实时结果

javascript - Angular 2库配置

angular - 在 Angular 中获取路由参数的有效方法

angular - 从抽象类继承存在依赖注入(inject)问题

javascript - 如何从firebase实时数据库获取并显示数据?

javascript - firebase的updateProfile是否返回Promise中的用户