我想用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)
})
}
但是,结果只有第一项的第一项被处理。 也就是说,Foreach 不起作用。 如果您删除 async,await,Foreach 将起作用。 我们怎样才能使它们兼容?
最佳答案
您将无法使用 forEach,因为它要求您传递一个函数,并且它不会使用它返回的 Promise(这始终是异步函数返回的内容)。相反,将数据库子节点转换为数组并使用 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)
}
}
另请注意,Firebase 返回的快照不是数组,无法直接使用 for/of 进行迭代。它的forEach方法是它自己特殊的子节点迭代器。
关于javascript - 无法使用 async 和 Foreach 处理 Firebase 获取的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54916967/