【问题标题】:Firebase observeEventType .childAdded doesn't work as promisedFirebase observeEventType .childAdded 不能按承诺工作
【发布时间】:2017-11-10 17:21:55
【问题描述】:

当我在视图控制器中调用这个观察函数时,.childadded 立即返回一个已经存储的对象,而不是像.childadded 所怀疑的那样刚刚添加了 bin。

func observe(callback: RiderVC){
    let ref = DBProvider.Instance.dbRef.child("rideRequests")
    ref.observe(DataEventType.childAdded) { (snapshot: DataSnapshot) in
    if let data = snapshot.value as? NSDictionary {
    let drive = cabRide(ritID: ritID, bestemming: bestemming, 
     vanafLocatie: vanaf, taxiID: taxiID, status: status)
    print(drive)
    callback.alertForARide(title: "Wilt u deze rit krijgen?", message: "Van: \(vanaf), Naar: \(bestemming)", ritID: ritID)
    }
  } 
}

当我使用.childchanged 尝试此功能时,我只会在它按预期进行更改时收到警报,但在执行.chiladded 时,它只是将所有请求从数据库中取出,并且这些请求已经在那里。

当我添加一个新请求时,它也会发出警报。所以它有效,但我怎样才能摆脱未添加和已经存在的请求?

有人知道这个漏洞吗?

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database observers


    【解决方案1】:

    这完全按照承诺工作。来自文档:

    检索项目列表或监听项目列表的添加。 此事件为每个现有的孩子触发一次,然后再次触发 每次将新的孩子添加到指定的路径时。听众是 传递了一个包含新孩子数据的快照。

    起初这可能看起来很奇怪,但这通常是大多数开发人员想要的,因为它基本上是一种从数据库中特定分支询问所有数据的方式,即使将来会添加新项目。

    如果您希望它按照您所描述的方式工作,即仅在应用启动后在数据库中获取新项目,您需要自己做一些工作。首先,您需要为要添加到数据库的对象添加时间戳。然后,您需要进行某种调用,要求通过这些时间戳查询您的数据库。它可能看起来像这样:

    myDatabaseRef.queryOrdered(byChild: "myTimestamp").queryStarting(atValue: <currentTimestamp>)
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2016-09-05
      • 2023-04-01
      • 2018-04-19
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多