javascript - Node.js 文件系统 : Promise once read all files

标签 javascript node.js fs

我正在使用 Node.js 文件系统来构建文件路径数组。我想知道所有文件何时已被读取,以便我可以进一步处理我的数组。

事件顺序:

  1. 进入文件夹
  2. 获取每个文件的路径
  3. 将每个路径放入数组
  4. 完成后请告诉我

代码:

'use strict';

const fs = require('fs');

function readDirectory(path) {
  return new Promise((resolve, reject) => {
    const files = [];
    fs.readdir(path, (err, contents) => {
      if (err) {
        reject(err);
      }
      contents.forEach((file) => {
        const pathname = `${ path }/${ file }`;
        getFilesFromPath(pathname).then(() => {
          console.log('pathname', pathname);
          files.push(pathname);
        });
        resolve(files);
      });
    });
  });
}

function getFilesFromPath(path) {
  return new Promise((resolve, reject) => {
    const stat = fs.statSync(path);

    if (stat.isFile()) {
      fs.readFile(path, 'utf8', (err, data) => {
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      });
    } else if (stat.isDirectory()) {
      readDirectory(path);
    }
  });
}

getFilesFromPath('./dist');

非常适合粘合:

Promise.all(files).then(() => {
    // do stuff
})

最佳答案

你的建议非常有效 - 你尝试过吗?这是一种典型的做法:

getFilesFromPath( path ).then( files => {
   const filePromises = files.map( readFile );
   return Promises.all( filePromises );
}).then( fileContentsArray => {
   //do stuff - the array will contain the contents of each file
});

您必须自己编写“readFile()”函数,但看起来您已经完成了。

关于javascript - Node.js 文件系统 : Promise once read all files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134148/

相关文章:

node.js - 路径 "/tmp/build_.../client/package.json"没有这样的文件或目录

javascript - TypeError : Cannot read property 'then' of undefined. 当我尝试运行 updatefirst 函数时出现此错误

c++ - 使 system() 产生的子进程在父进程收到终止信号并退出后继续运行

javascript - 创建自己的函数时出现未知错误

javascript - 使用 HTML/Javascript 绘制椭圆

javascript - Plottable.Plots.Rectangle 创建宽度为 0 的矩形

javascript - 可以从父窗口访问响应代码吗?

javascript - 使用 Nodejs 创建/更新 JavaScript 文件/代码

node.js - 当文件中有更新时,如何从nodejs中的fs.watch获取更新的数据

node.js - 在 node.js 中使用 response.download() 后删除文件?