У меня есть функция, которая читает dir (папки и файлы) и создает документы MongoDB в одной коллекции с именем Item. Все файлы, находящиеся во вложенных папках, также будут вставлены в документ 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 .
Некоторые другие решения существуют, но они не помогли мне. Спасибо за ваш вклад.