>source

동시에 여러 파일을 읽는 가장 효율적인 방법이 무엇인지 알고 싶었습니다. 나는 파일 경로의 배열을 가지고 있으며 경로 배열의 인덱스에 따라 정렬 된 fs 읽기 파일 (asyncRead가 아니라 콜백 기능을 사용하지 않음)을 사용하여 데이터 배열을 만들고 싶습니다. 3 개의 파일을 동시에 읽어야하는데 동시에 파일을 읽는 방법을 찾을 수 없습니다.

이 방법을 찾았지만 동시에 파일을 읽는지 여부와 그 방법을 알 수 없습니다.

***function simultaneouslyRead(filePath1, filePath2){
    var async = require('async'),
    fs = require('fs'),
    files = [filePath1, filePath2];
    async.map(files, fs.readFile, function(err, files) {
        if(err) {
            throw err;
        }
        files.forEach(function(file) {
          console.log(file.toString());
      });
    });
  }***

  • 답변 # 1

    util.promisify를 사용하여 fs.readFile의 promise 기반 버전을 만든 다음 Promise.all을 사용하여 모든 파일을 다음과 같이 배열로 읽을 수 있습니다.

    const fs = require("fs");
    const { promisify } = require("util");
    const promiseReadFile = promisify(fs.readFile);
    async function readFiles(files) {
        const fileArray = await Promise.all(files.map(file => promiseReadFile(file)));
        console.log("File contents:", fileArray);
        return fileArray;
    }
    readFiles(['file1.txt', 'file2.txt']);
    
    

    fileArray는 데이터를 읽은 후에 버퍼 배열을 포함합니다.

    모든 읽기 실패의 오류를 포함하는 수정 된 버전 :

    const fs = require("fs");
    function promiseReadFile(path, options = {}) {
        return new Promise(resolve => { 
            fs.readFile(path, options, (err, data) => resolve({ err, data }));
        });
    }
    async function readFiles(files) {
        const fileArray = await Promise.all(files.map(file => promiseReadFile(file)));
        console.log("File contents:", fileArray);
        return fileArray;
    }
    readFiles(['file1.txt', 'file2.txt', 'file3.txt']);
    
    

관련 자료

  • 이전 javascript - 월별 수익을 저장하는 MySQL 방법
  • 다음 node.js - "npm install X --save"는 X가 N에 의존하는 경우 N이 X와 함께 자동으로 설치된다는 의미입니까?