javascript - Firebase 实时数据库 - 在迭代数组时获取数据
问题描述
如何使用数组作为源从 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.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}`)
})
推荐阅读
- c++ - 在使用 MPI 和 C++ 进行广播后,如何对二维数组求和?
- javascript - Google Drive API 将 blob 从 json 提取到 javascript
- django - 我们是否需要在 django 请求中明确关闭会话?
- c# - C# 最小值和最大值
- javascript - 使用js在可搜索的下拉列表中获取选定的文本
- kotlin - 如何从 kotlin 中的复杂数据类中检索嵌套值
- asp.net-core - 为什么我的 Swagger index.html 页面在发布后是空白的?
- python-3.x - 尝试为 tkinter 中的禁用按钮分配背景颜色时出错
- angular - Angular 2 错误 TS2339:“BookComponent”类型上不存在属性“posts”
- google-chrome - Svelte - Carbon 组件导入中断调试