【发布时间】:2020-01-21 20:09:46
【问题描述】:
我有一个函数可以读取目录(文件夹和文件)并在一个名为 Item 的集合中创建 MongoDB 文档。位于嵌套文件夹中的每个文件也将插入到 MongoDB 文档中。
我的文件功能是这样的:
async generateFileItemInPath(path, itemName){
let itemObj = new Item();
//let itemObj = {};
itemObj.itemName = itemName;
itemObj.isAFile = true;
itemObj.itemPath = path;
itemObj.save(function (err) {
if (err){
console.log("Error");
} else {
console.log("No Error !");
return itemObj;
}
});
}
我的文件夹功能是这样的:
async generateFolderItemInPath(path, itemName){
let itemObj = new Item();
//let itemObj = {};
itemObj.itemName = itemName;
itemObj.isAFile = false;
itemObj.itemPath = path;
itemObj.save(function (err) {
if (err){
console.log("Error");
} else {
console.log("No Error !");
return itemObj;
}
});
}
我从这个递归函数中调用这些函数:
async createItemsData(parentPath, itemName) {
let resultList = [];
let itemsPath = parentPath+itemName;
let itemsInPath = fs.readdirSync(itemsPath);
for(let i=0; i<itemsInPath.length; i++){
let isDirAFile = fs.lstatSync(itemsPath + itemsInPath[i]).isFile();
let isDirAFolder = fs.lstatSync(itemsPath + itemsInPath[i]).isDirectory();
if(isDirAFile){
let tempItemObj = await self.generateFileItemInPath(itemsPath, itemsInPath[i]);
resultList.push(tempItemObj);
} else if(isDirAFolder){
let tempItemObj = await self.generateFolderItemInPath(itemsPath, itemsInPath[i]);
tempItemObj.itemChildren = [];
tempItemObj.itemChildren.push(await self.createItemsData(itemsPath, itemsInPath[i] + "\\"));
resultList.push(tempItemObj);
}
}
return resultList;
}
我的问题是每当 generateFileItemInPath、generateFolderItemInPath 和 createItemsData 被调用时,代码永远不会在 createItemsData 中等待这些函数的结果。
存在其他一些解决方案,但它们对我没有帮助。感谢您的贡献。
【问题讨论】:
-
您将无法在传统循环中使用 await。请参阅此问题以获取信息stackoverflow.com/questions/37576685/…
标签: javascript node.js promise async-await synchronization