当我将startAt(优先级)添加到on(“value”,fn)调用时,我在创建节点后没有得到回调 .

var myDataRef = firebaseRef.push(data);  
myDataref.startAt(200).on("value", fn(snap) { blah });

我的设置:

  • 我有一个将数据推送到Firebase的客户端 .

  • 客户端在上面步骤中返回的数据引用上添加值回调 .

  • 我有一个使用的服务器组件使用firebase-work-queue在Firebase到达时从Firebase中提取项目 . 但是,不是从队列中删除项目,而是将项目的优先级设置为100,以将其标记为工作人员声明的 .

  • 然后,服务器组件对数据执行操作,完成后更新数据并将优先级设置为200.将任务标记为已完成 .

在客户端,如果我不使用startAt(200),我会得到以下回调:

  • 首次推送数据时为空值 .

  • 然后我得到一个回调,其中包含我实际推送的数据 .

  • 最后,我在更新数据并设置优先级200时收到回调 .

您会注意到,当服务器声明队列条目并将优先级设置为100时,我没有收到回调 . 我注意到只更改节点的优先级不会产生值回调 . 我想这在技术上是正确的,因为你没有改变 Value ,只改变优先权 . 技术上正确是最好的正确 .

我构造我的代码以忽略上面步骤1和2中的无关回调 . 但我想使用startAt(200)来阻止这些回调 . 但是当我应用startAt(200)时,我只得到第一个带有空数据的回调(步骤1) . 这没有意义,因为它甚至没有优先权 .

所以我的问题是这里发生了什么?