node.js - promise 不等待 firebase 查询完成并很快得到解决

标签 node.js firebase google-cloud-functions

我创建了一个 promise ,它将接受一组 Firebase 键作为输入,循环它们以查询 Firebase 实时数据库。我的问题是,即使在我使用 async wait 之后,为了让 firebase 提供结果,promise 也会很快得到解决。

function firebaseQuery(keys){
  const result = [];
  return new Promise((resolve, reject) => {
    keys.forEach((key) => {
      const snap = app.child(key).once('value');
      const snapJSON = await snap.then(snapshot => snapshot.toJSON());
      result.push({ key: key, post: snapJSON });
      console.log(result);
    });
    resolve(result);
  });
}

最佳答案

forEach 不会因等待语句而暂停,因此它不会像这样工作( https://codeburst.io/javascript-async-await-with-foreach-b6ba62bbf404 )。最好将键映射到 Promise 数组中,然后使用 Promise.all() 等待它们全部解析。像这样的事情(只要确保处理你的错误)

async function firebaseQuery(keys){
  const result = await Promise.all(keys.map(async key => {
    const snap = app.child(key).once('value');
    const snapJSON = await snap.then(snapshot => snapshot.toJSON());
    const returnValue = { key: key, post: snapJSON };
    console.log(returnValue);
    return returnValue;
  }));
}

关于node.js - promise 不等待 firebase 查询完成并很快得到解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564980/

相关文章:

node.js - libuv 是在 unix 中使用 epoll 还是 select(2)

python-3.x - 谷歌云功能错误与轮子和pywin32

javascript - 如果数据未定义,则 pubsub 必须至少存在一个属性

javascript - 具有对外部 api 的基本身份验证的获取请求的 Firebase 云功能

java - Firebase Java Server 向所有设备发送推送通知

javascript - 如何在axios上使用react选择参数?

node.js - NodeJS - 数据类型、变量、控制结构、迭代

node.js - 带有 cookie 的 ExpressJS session

android - 如何在聊天应用程序中存储上次查看的消息

firebase - 测试数据库模式下Firestore权限错误