最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

逐一读取文件并解决它们

IT培训 admin 3浏览 0评论

逐一读取文件并解决它们

我需要读取的文件夹中有数百个文件。当前,我正在使用一种方法,该方法读取所有文件,然后将内容作为数组返回。但是我需要更改它,以便我读取文件并将其发送到客户端,然后读取第二个文件,直到最后...以便使其更有效。有什么建议吗?

当前代码:

const fse = require("fs-extra");
const path = require("path");
return (
  fse
    .readdir(direc)
    .then((filenames: any) => {
      return filenames.map((filename: any) => path.join(direc, filename));
    })
    .then((filepaths: any) => {
      return filepaths.map((filepath: any) =>
        fse.readFile(filepath).then((filecontents: any) => {
          return JSON.parse(filecontents);
        })
      );
    })
    // Promise.all consumes an array of promises, and returns a
    // new promise that will resolve to an array of concrete "answers"
    .then((filecontents: any) => Promise.all(filecontents))
    .then((realcontents: any) => {
      return realcontents;
    })
);

回答如下:

而不是将所有文件读取承诺放在数组中,然后调用Promise.all,将它们链接在一起。我对Typescript语法不太熟悉,因此我将以纯JS语言提供示例代码,希望您可以转换所需的任何内容:

// ...
.then(filepaths => {
  let promise = Promise.resolve();
  filepaths.forEach(filepath => {
      promise = promise
                .then(() => fs.readFile(filePath))
                .then(handleFile)
                .catch(handleError);
  });
  return promise;
})
// ...

然后,您只需要创建一个handleFile函数,该函数可以接收单个文件的文件内容并对其进行任何处理(解析它,通过响应将数据发送回去,等等)。这样,将按顺序处理每个文件。您还希望handleError函数也返回已解决的Promise,因此读取失败的文件不会破坏整个链。

逐一读取文件并解决它们

我需要读取的文件夹中有数百个文件。当前,我正在使用一种方法,该方法读取所有文件,然后将内容作为数组返回。但是我需要更改它,以便我读取文件并将其发送到客户端,然后读取第二个文件,直到最后...以便使其更有效。有什么建议吗?

当前代码:

const fse = require("fs-extra");
const path = require("path");
return (
  fse
    .readdir(direc)
    .then((filenames: any) => {
      return filenames.map((filename: any) => path.join(direc, filename));
    })
    .then((filepaths: any) => {
      return filepaths.map((filepath: any) =>
        fse.readFile(filepath).then((filecontents: any) => {
          return JSON.parse(filecontents);
        })
      );
    })
    // Promise.all consumes an array of promises, and returns a
    // new promise that will resolve to an array of concrete "answers"
    .then((filecontents: any) => Promise.all(filecontents))
    .then((realcontents: any) => {
      return realcontents;
    })
);

回答如下:

而不是将所有文件读取承诺放在数组中,然后调用Promise.all,将它们链接在一起。我对Typescript语法不太熟悉,因此我将以纯JS语言提供示例代码,希望您可以转换所需的任何内容:

// ...
.then(filepaths => {
  let promise = Promise.resolve();
  filepaths.forEach(filepath => {
      promise = promise
                .then(() => fs.readFile(filePath))
                .then(handleFile)
                .catch(handleError);
  });
  return promise;
})
// ...

然后,您只需要创建一个handleFile函数,该函数可以接收单个文件的文件内容并对其进行任何处理(解析它,通过响应将数据发送回去,等等)。这样,将按顺序处理每个文件。您还希望handleError函数也返回已解决的Promise,因此读取失败的文件不会破坏整个链。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论