首页 > 解决方案 > 处理嵌套的 firebase 函数

问题描述

你好我是相当新的云功能,我需要一点帮助,我试图制作一个包含类别及其子类别的级联,但我得到了错误的响应

我得到的最终响应是右括号,但是在发送响应之后,categoriesList 值会在我的控制台日志中更新


    if (!verifyKey(request.get('Authorization'))) {
        response.status(403).send('Unauthorized');
        return;
    }

     var categoriesList = "[";

         db.collection("categories").get()
        .then(querySnapshot => {
            
            querySnapshot.forEach(documentSnapshot => {
                let subcategories;
                let category = documentSnapshot.data();
               // console.log("id of doc -> ",`${documentSnapshot.id}`)
                db.collection("categories").doc(documentSnapshot.id).collection("subcategories").get().then(
                    querySnapshotsub=>{
                        querySnapshotsub.forEach(documentSnapshotsub=>{
                            //console.log("id of subdoc -> ",`${documentSnapshotsub.id}`)
                            subcategories=documentSnapshotsub.data().title;
                            
                            categoriesList += '["' + category.title + '","' + subcategories + '"],';
                            console.log("subcatxyz->",`${categoriesList}`)
                        })
                    }
                        
                )

                console.log("subcatss_ below ->",`${categoriesList}`)
            });

            
        })
        .catch((error) => {
            console.log(error);
            response.status(500).send(stdErrorMsg);
            return;
        });
        categoriesList = categoriesList.slice(0, -1);
            categoriesList += "]";
            console.log("category cass final->",`${categoriesList}`)
            response.status(200).send(categoriesList);

}); ```

 

标签: node.jsgoogle-cloud-firestoregoogle-cloud-functions

解决方案


您的异步工作没有得到适当的等待。这是一些(未经测试的)代码:

(async () => {

    if (!verifyKey(request.get('Authorization'))) {
        response.status(403).send('Unauthorized');
        return;
    }

    let categoriesList = "[";
    try {
        const querySnapshot = await db.collection("categories").get();
        for (const documentSnapshot of querySnapshot.docs) {
            let category = documentSnapshot.data();
            // console.log("id of doc -> ",`${documentSnapshot.id}`)
            const doc = db.collection("categories").doc(documentSnapshot.id);
            const querySnapshotsub = await doc.collection("subcategories").get();
            querySnapshotsub.forEach(documentSnapshotsub => {
                //console.log("id of subdoc -> ",`${documentSnapshotsub.id}`)
                const subTitle = documentSnapshotsub.data().title;
                categoriesList += '["' + category.title + '","' + subTitle + '"],';
                console.log("subcatxyz->", `${categoriesList}`)
            });
            console.log("subcatss_ below ->", `${categoriesList}`)
        }
    } catch (error) {
        console.log(error);
        response.status(500).send(stdErrorMsg);
        return;
    };

    categoriesList = categoriesList.slice(0, -1);
    categoriesList += "]";
    console.log("category cass final->", `${categoriesList}`)
    response.status(200).send(categoriesList);

});

推荐阅读