首页 > 解决方案 > 异步/等待查找文档 ID,然后查找单独的文档集

问题描述

我在我的应用程序中记录了用户“喜欢”的最喜欢的优惠。这些记录包括所有者和商品 ID。我想为特定用户收集前 25 个最喜欢的优惠。所有的 firestore 命令都是异步的,我需要在渲染页面之前收集所有的 offer 对象。

这是我第一次使用 async/await,从一开始就迅速成长为嵌套的 async/await。必须有一种更简单的方法来从 fav 对象中收集 ID,然后使用这些 ID 查找 Offer?

        async getItems() {
          const collectfavs = async () => {
            favsRef = firestore.collection('favs').where('owner','==',getUserID()).orderBy('created', 'desc').limit(25);
            let allFavsSnapshot = await favsRef.get();
            allFavsSnapshot.forEach(doc => {
                let data = doc.data();
                favsList.push(data.offer);
            });
            console.log('favs:',favsList);
          }
          const collectoffers = async () => {
            favsList.forEach(async (fav) => {
                let doc = await firestore.collection('offers').doc(fav).get()
                console.log('doc:', doc);

                let data = doc.data();
                data.id = doc.id;
                offerList.push(data);
            });
            console.log('offers:', offerList);
          }
          await collectfavs();
          await collectoffers();
       }

标签: javascriptfirebasegoogle-cloud-platformgoogle-cloud-firestore

解决方案


我不确定你为什么定义两个本地函数只是为了调用它们一次。这似乎比完成工作所需的代码更多。除此之外,你所做的对我来说似乎并不复杂。但是如果你想减少代码行数:

    async getItems() {
        favsRef = firestore.collection('favs').where('owner','==',getUserID()).orderBy('created', 'desc').limit(25);
        let allFavsSnapshot = await favsRef.get();
        allFavsSnapshot.forEach(doc => {
            let data = doc.data();
            favsList.push(data.offer);
        });
        console.log('favs:',favsList);

        favsList.forEach(async (fav) => {
            let doc = await firestore.collection('offers').doc(fav).get()
            console.log('doc:', doc);

            let data = doc.data();
            data.id = doc.id;
            offerList.push(data);
        });
        console.log('offers:', offerList);
   }

请记住,我不知道你在哪里定义favsListofferList,所以我只是盲目地使用它,就像你展示的那样。


推荐阅读