我有两个功能。
第一个是循环访问某些文件夹以获取路径,该路径在数组中解析。
第二个函数获取此值,并应使用fs.readdir遍历此数组以检查这些文件夹中的图像数量。
该函数应该解析一个对象,该对象包含路径和值文件夹中的图像数量。
我的问题是我只能正确解析第一个文件夹,而不是所有其他文件夹的总和。
我还创建了一个回调函数,该回调函数调用可解决如下承诺的函数:
async pResolve(pr) {
return new Promise((res, rej) => {
res(pr);
});
}
我将此函数添加到forEach循环中,如下所示:
let x = pResolve(obj);
res(x);
我试图通过以下方式解决它:
Promise.all([folderList]).then(arrList => {
console.log(array);
});
}
第二个函数中的代码如下:
async loopOverArray(){
const getPaths = await this.checkGalleryFolder();
let folderList = new Promise((res, rej) => {
getDir.forEach(val => {
let obj = {};
fs.readdir(val, (err, data) => {
obj.path = val;
obj.img = data.length;
res(obj);
});
});
});
}
async checkGalleryFolder() {
const pathArr = [];
return new Promise((res, rej) => {
fs.readdir(this.p, (err, folders) => {
folders.forEach((val, i) => {
if (val.includes("set")) {
let gPath = this.p + `/${val}`;
pathArr.push(gPath);
res(pathArr);
// The function resolves this:
// [ '/sandbox/src/public/set1',
// '/sandbox/src/public/set2',
// '/sandbox/src/public/set3' ];
}
});
});
});
}
};
正如我提到的,我收到一个对象,它看起来像这样:
[{ path: '/sandbox/src/public/set1', img: 12 }];
但是结果应如下所示:
[ { path: '/sandbox/src/public/set1', img: 12 },
{ path: '/sandbox/src/public/set2_f', img: 0 },
{ path: '/sandbox/src/public/set2', img: 12 },
{ path: '/sandbox/src/public/set3', img: 0 },
{ path: '/sandbox/src/public/set1_f', img: 0 } ];
我如何正确解决此承诺? 为什么为什么checkGalleryFolder()函数为我提供适当的数组,而其他函数却没有呢?
答案 0 :(得分:0)
好的,我像这样改变了loopOverArray(),它现在解析了一个包含所有对象的数组! 如果有人知道更好的方法,请分享:)
async loopOverArray() {
const getDir = await this.checkGalleryFolder();
let arr = [];
let folderList = new Promise((res, rej) => {
getDir.forEach(val => {
let obj = {};
fs.readdir(val, (err, data) => {
obj.path = val;
obj.img = data.length;
let x = Promise.resolve(obj);
x.then(data => {
arr.push(data);
if (arr.length === getDir.length) {
res(arr);
}
});
});
});
});