javascript - Firebase实时数据库 - 迭代数组时获取数据

标签 javascript firebase asynchronous firebase-realtime-database

如何使用数组作为源从 Firebase 实时数据库中的多个节点获取数据?

由于同步调用,下面的代码不起作用。

const myFunction= (snapshot) => {
  const dbRoot = snapshot.ref
  dbPaths = ['one', 'two']

  console.log('myFunction began')

  dbPaths.forEach((dbpath) => {
    const ref = dbRoot.child(dbpath)
    ref.orderByChild('name')
    .equalTo('Donald')
    .once('value', (removeSnapshot) => {
      const dataNode = removeSnapshot.val()
      console.log('myFunction dataNode', dataNode)
      //... logic
    })
  })

  console.log('myFunction finished')
}

输出将类似于

myFunction began
myFunction finished
myFunction dataNode {data:'somedata'}
myFunction dataNode {data:null}

如何在等待获取完成时迭代包含要获取的数据库路径的数组?

最佳答案

一旦你说“等待[异步操作]完成”,就想“ promise ”。

在本例中,由于您正在等待多个操作,因此您正在寻找 Promise.all:

const dbRoot = snapshot.ref
dbPaths = ['one', 'two']
let promises = [];

console.log('myFunction began')

dbPaths.forEach((dbpath) => {
  const ref = dbRoot.child(dbpath)
  promises.push(
    ref.orderByChild('name')
    .equalTo('Donald')
    .once('value', (removeSnapshot) => {
      return removeSnapshot.val()
    })
  );
})

Promise.all(promises).then((values) => {
  console.log(`All loading finished, all values are in ${values}`) 
})

关于javascript - Firebase实时数据库 - 迭代数组时获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810937/

相关文章:

c# - unity - 从 firebase 数据库中检索数据

node.js - 如何从 Firestore 中的查询返回结果?

javascript - Meteor连接超时调整

javascript - "crop"图像的脚本间歇性运行。

javascript - jQuery 按键事件仅适用于末尾带有# 符号的网址

c# - Mutex/Monitor 不适用于 C# 线程同步

sql - 异步查询状态功能仅在同一 session 中可用?

javascript - 来自 Android 浏览器和 Dashcode 移动项目的错误触摸事件

ios - 检索 Firebase 数据库的值,嵌套数据

c# - 如何从 WCF 获取数据(异步)?