【问题标题】:How to resolve an array in a Class when functions depend on each other当函数相互依赖时如何解析类中的数组
【发布时间】: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


    【解决方案1】:

    好的,我像这样更改了 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);
                        }
                    });
                });
            });
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多