node.js - 处理嵌套的 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);
}); ```
解决方案
您的异步工作没有得到适当的等待。这是一些(未经测试的)代码:
(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);
});
推荐阅读
- mysql - 同时更新
- python - 我想将列标题向下移动成行,所有行都向下移动一个,这样做的精确和简短的方法是什么?
- rxjs - rxjs 可以用 switchmap 代替手动订阅处理
- jbehave - 我想通过命令行运行我的 Jbehave 测试
- javascript - Cheerio 指导:如何组合多个“td”类
- left-join - 如何在 Tableau 中获取唯一 ID 唯一一次的总和值
- java - Libgdx Spritebatch 错误
- c# - AppDomain.CurrentDomain.UnhandledException 的异步事件处理程序的解决方法
- django - 从与 django 集成的 scrapy 中保存图像
- oracle - “ORA-00917: 缺少逗号” & vbLf