下面的代码运行在app.js服务器上:
async function getNewNodesArray(level, nID, pdbID) {
let newNodesArray = [];
const dbNodes = await partsAssemblyModel.find({ParentID:pdbID}).exec();
dbNodes.map(async(dbN) => {
const dbChildren = partsAssemblyModel.find({ParentID:dbN.id}).exec();
nID++;
//newNode = {id:nID, dbId:dbN.id, name:dbN.Description, isParent:true}
newNode = {id:nID, name:dbN.Description, isParent:(dbChildren.length > 0)}
newNodesArray.push(newNode);
})
return newNodesArray;
}
字符串
异步函数getNewNodesArray从express post函数调用
app.post("/getTreeNodes", async (req, res) => {
...
...
...
var ppp = await getNewNodesArray(pLevel, pId, pdbID);
res.send(ppp);
});
型
我尝试获取所有partsAssemblyModel文档,这些文档具有通过id-ParentID
关系链接到它的partsAssemblyModel文档。实际上,代码按预期执行,除了dbNodes对象是查询的结果,但dbChildren仍然是一个promise,正如预期的那样,没有await。
如果我将await添加到dbChildren赋值中,如下所示:
const dbChildren = await partsAssemblyModel.find({ParentID:dbN.id}).exec();
型
这一行被执行了Map调用它的次数,并且下一行执行返回到app.post的res.send(ppp)
;只有在app.post函数完成执行后,执行才会返回到nID++。
我的问题是,为什么代码不在下一行继续执行:
const dbChildren = await partsAssemblyModel.find({ParentID:dbN.id}).exec(); as it does in the line
const dbNodes = await partsAssemblyModel.find({ParentID:pdbID}).exec();
型
任何有助于理解原因的帮助都是值得赞赏的,解决问题的方法将有很大帮助。
谢啦,谢啦
1条答案
按热度按时间thigvfpy1#
我找到了一个解决问题的方法,将map替换为一个简单的for语句:
字符串
但我还是不明白为什么Map不起作用。