【问题标题】:AngularFire2 Firebase Observable never ends (list is empty)AngularFire2 Firebase Observable 永远不会结束(列表为空)
【发布时间】:2018-04-19 22:35:39
【问题描述】:

我正在尝试查询一个空的 firebase 列表。问题是可观察方法 subscribe 永远不会完成,我无法向用户显示 ddbb 列表为空。

函数 getUserAppointmentsByDate(...) 正在调用 getUserAppointments(...),其中 this.database.list('/appointment/users/' + user_uid)空的 输入用户 (user_uid) 的 firebase 列表。

我应该如何管理对 firebase 的空查询?

提前致谢!

getUserAppointmentsByDate(user_uid: string, start: string, end: string) {

  if (typeof (user_uid) == "undefined" || typeof (start) == "undefined" || typeof (end) == "undefined") {
    console.error("invalid argument for getPatientReport");
    return;
  }

  return this.getUserAppointments(user_uid)
  .map(
    (appointment) => {
      return appointment
        .filter((appointment) => {
          var appointmentStart = new Date(appointment.start);
          var startFilter = new Date(start);
          var endFilter = new Date(end);
          //Filter old, not cancelled and not deleted
          return (appointmentStart.getTime() < endFilter.getTime())
            && (appointmentStart.getTime() > startFilter.getTime())
            && (appointment.status != AppointmentStatus.CANCELLED);
        });
    })
}

getUserAppointments(user_uid: string): any {
   return this.database.list('/appointment/users/' + user_uid) //*THIS IS AN EMPTY LIST
    .mergeMap((appointments) => {
      return Observable.forkJoin(appointments.map(
        (appointment) => this.database.object('/appointment/list/' + appointment.$key)
      .take(1)))
  })
}

【问题讨论】:

    标签: firebase ionic-framework observable angularfire2


    【解决方案1】:

    this.database.list('/appointment/users/' + user_uid) 返回一个空数组。 Observable.forkJoin(appointments.map( 完成而不发出任何值(这是预期的 forkJoin 工作方式)。在这种情况下,您有两个选择,在完整的函数中处理。

    .subscribe(
      res => console.log('I got values'),
      err => console.log('I got errors'),
      // do it whatever you want here
      () => console.log('I complete with any values')
    )
    

    或处理if statement:

    import { of } from 'rxjs/observable/of';
    ...
    return this.database.list('/appointment/users/' + user_uid)
        .mergeMap((appointments) => {
          if (appointments.length === 0) return of([]);
          return Observable.forkJoin(appointments.map(
            (appointment) => this.database.object('/appointment/list/' + appointment.$key)
          .take(1)))
      })
    

    【讨论】:

    • 非常感谢,你真的拯救了我的一天!!我使用了 of([]) 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2021-05-17
    • 2013-04-09
    • 2010-12-27
    • 1970-01-01
    • 2018-04-09
    • 2021-08-05
    相关资源
    最近更新 更多