javascript - 无法使用 async 和 Foreach 处理 Firebase 获取的值

标签 javascript firebase firebase-realtime-database foreach async-await

我想用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/

相关文章:

javascript - 带有特殊字符的AngularJS表达式

javascript - Angular Directive(指令)设置模式

ios - firebaseui-ios FirebaseTableViewDataSource 与 UITableView 同步

ios - Firebase Swift 检查用户是否存在无法正常工作

javascript - Firebase 实时数据库一次更新多个节点

javascript - 捕获双击 Yii 的 CGridView 行

iOS Firebase Crashlytics 未在仪表板中显示崩溃

android - 无法导入 firebase auth android

ios - 从 Firebase 获取数据非常慢

javascript - 这个 "days in month"函数是如何工作的?