【发布时间】:2019-10-05 02:36:36
【问题描述】:
我有两个功能。
第一个是遍历一些文件夹来获取路径,路径在数组中解析。
第二个函数获取该值并应使用 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 } ];
如何正确解决这个 Promise? 为什么 checkGalleryFolder() 函数给了我一个正确的数组而另一个没有?
【问题讨论】:
标签: arrays node.js async-await es6-promise