zen*_*zen 1 javascript foreach async-await firebase firebase-realtime-database
我想用 Forach 处理 Firebase 获得的值。为了按顺序处理,使用了 async、await。
const sleep = time => new Promise(resolve => setTimeout(resolve, time));
async function () {
var snapshot = await firebase.database().ref("/path/").once("value")
snapshot.forEach(async function (childSnapshot) {
await sleep(1000)
console.log(snapshot.val)
})
}
Run Code Online (Sandbox Code Playgroud)
然而,结果只有第一项的第一项被处理。也就是说,Foreach 不起作用。如果您删除 async、await,Foreach 将起作用。我们怎样才能让它们兼容?
您将无法使用 forEach,因为它要求您传递一个函数,并且它不会使用它返回的承诺(这始终是异步函数返回的内容)。相反,将数据库子节点转换为数组并使用 for/of 对其进行迭代:
async function () {
const snapshot = await firebase.database().ref("/path/").once("value")
const array = []
snapshot.forEach(child => array.push(child))
for (const child of array) {
await sleep(1000)
console.log(snapshot.val)
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,Firebase 返回的快照不是数组,不能直接使用 for/of 进行迭代。它的 forEach 方法是它自己特殊的子节点迭代器。
| 归档时间: |
|
| 查看次数: |
1243 次 |
| 最近记录: |