Javascript 侦听更改时查询多个键-Firebase

Javascript 侦听更改时查询多个键-Firebase,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我用它作为参考,因为它非常相似 如果我有一组已定义的键: -Ke1uhoT3gpHR_VsehIv -Ke8qAECkZC9ygGW3dEJ -Ke8qMU7OEfUnuXSlhhl 而且还要知道它们都存在于一个节点下(比如说/items),我如何查询它们,同时还要监听这些键上的更改(即不使用myRef.one(value),而是使用myRef.on('value',snapshot=>{…}) 我知道这是可能的: var keys = [ "-Ke1uhoT3gpHR_VsehIv",

我用它作为参考,因为它非常相似

如果我有一组已定义的键:

-Ke1uhoT3gpHR_VsehIv
-Ke8qAECkZC9ygGW3dEJ
-Ke8qMU7OEfUnuXSlhhl
而且还要知道它们都存在于一个节点下(比如说
/items
),我如何查询它们,同时还要监听这些键上的更改(即不使用
myRef.one(value)
,而是使用
myRef.on('value',snapshot=>{…})

我知道这是可能的:

var keys = [ 
  "-Ke1uhoT3gpHR_VsehIv",
  "-Ke8qAECkZC9ygGW3dEJ",
  "-Ke8qMU7OEfUnuXSlhhl"
];
var promises = keys.map(function(key) {
  return firebase.database().ref("/items/").child(key).once("value");
});
Promise.all(promises).then(function(snapshots) {
  snapshots.forEach(function(snapshot) {
    console.log(snapshot.key+": "+snapshot.val());
  });
});

但它是一个静态快照。在侦听更改时是否可以执行相同的操作?

我也一直在寻找它。因此它似乎不存在,因为Firebase有一个高效的连接,因此不必为了连接性能而组合“查询”

因此,您将为所有键设置
on('value',…)
事件侦听器。根据问题中给出的代码片段,您可以为其编写如下代码:

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv",
    "-Ke8qAECkZC9ygGW3dEJ",
    "-Ke8qMU7OEfUnuXSlhhl"
];
function itemUpdate(snapshot) {
    console.log(snapshot.key+": ", snapshot.val());
}
var ref = firebase.database().ref("/items/");
keys.forEach(function(key) {
    ref.child(key).on("value", itemUpdate);
});

唯一的改进是定义回调函数,或者创建尽可能多的回调函数,只要你有键可以监听,然后把ref放在变量中。

你想实现什么?因为
Promise.all()
在链接答案中是为了确保您可以检测到何时加载了所有数据。既然您表示要使用常规的/
on()
侦听器,那么等待其值的用例是什么?@FrankvanPuffelen这些键表示提要中显示的作业。我希望提要中的作业能够实时更新(假设作业的创建者更新了作业时间)。因此,这听起来像是常规的
on()
侦听器可以正常工作,您不需要
承诺。all()
。您问题中的代码是您链接的我的答案的1:1副本。您是否尝试使用
on()附加侦听器
已经存在?是的,我附加了它。我想处理
on()
侦听器的唯一方法是循环通过如下键:
for(让I=0;I{//处理所有传入的数据}
这是正确的方法吗?它是在一个请求中完成的吗?我想我希望有一种方法可以将所有承诺存储在一个数组中,并在第一次读取时知道像
Promise。所有的
都完成了。因为
on()
不返回承诺,所以不能使用
Promise.all()
使用它。但是您可以循环使用与找到的代码类似的所有键,并在()上附加一个常规的
侦听器。
如果这会导致问题,请通过编辑问题发布。