firebase - 多个 Firestore 查询,单个 promise /回调

标签 firebase google-cloud-firestore

我了解 Firestore 不支持查询的逻辑 OR。
我的想法是创建多个查询并在客户端合并结果。
我正在开发一个新闻应用程序,我正在尝试获取所有包含我的用户兴趣标签(例如技术、音乐等)的文章
一个普通用户有 20 个标签,所以我将提出 20 个不同的请求。

有没有人有链接多个请求并在所有结果到达时返回唯一 promise 的经验。?

我正在使用 js sdk

我的数据结构:

文章(合集)

-article (document)
--id: 10
--time: 1502144665
--title: "test title"
--text: "test text"
--tags(obj) 
---technology: 1502144665,
---politics: 1502144665,
---sports: 1502144665

所以我需要创建多个数据库请求,如下所示。
user.tags = ["technology","politics","sports","architecture","business"];

for (var i = 0; i < user.tags.length; i++) {
  db.collection('articles').where(user.tags[i], '>', 0).orderBy(user.tags[i]))
    .get()
    .then(() => {
        // ... push to article array
  });)
}

我试图弄清楚如何在每个请求完成时创建一个 promise /回调。

最佳答案

您可以将每个数据库访问 Promise 保存在一个数组中,然后使用 Promise.all()获取在每个数据库访问完成时解析的 Promise。 (这段代码没有经过测试,它可能包含一些语法错误,但它演示了这个想法。)

user.tags = ["technology","politics","sports","architecture","business"];

var dbPromises = [];
for (var i = 0; i < user.tags.length; i++) {
  dbPromises.push(
      db.collection('articles')
        .where(user.tags[i], '>', 0)
        .orderBy(user.tags[i])
        .get()
  );
}

Promise.all(dbPromises)
    .then(() => {
        // ... push to article array
};

关于firebase - 多个 Firestore 查询,单个 promise /回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552876/

相关文章:

javascript - Nuxt Firebase 身份验证中间件

android - CircleCI构建获取 “Could not find com.google.android.gms:play-services-identity:11.0.1”

firebase - 如何安装非官方 Firebase 扩展

python - Firebase Python firestore.DELETE_FIELD 在 VS Code 中显示为错误

ios - Swift Firestore 更新字段值

firebase - 如何通过 Bitbucket Pipeline 部署 Firebase?

angularjs - 使用 ui-route 解析 firebase 数据

firebase - 如何在 Firebase 控制台中使用对象数组创建 Firestore 文档?

firebase - 如何从 Firestore 导出安全和索引规则?

angular - 如何从 Javascript 在 Cloud Firestore 中创建集合?