如何使用数组作为源从 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/