使用nodejs fs同时读取文件
Read files simultaneously using nodejs fs
我想知道同时读取多个文件最有效的方法是什么。
我有一个文件路径数组,我想使用根据路径数组的索引排列的 fs 读取文件(不是 asyncRead 并且不使用回调函数)创建一个数据数组。
我需要同时读取三个文件,我找不到如何同时读取文件。
我找到了这个方法,但无法弄清楚它是否同时读取文件,如果是的话如何:
***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());
});
});
}***
我们可以使用util.promisify to create a promise based version of fs.readFile,然后使用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']);
const fs= require('fs').promises;
async function readFiles(files) {
const results = await Promise.allSettled(files.map(file=> fs.readFile(file)));
console.log(results);
return results;
}
readFiles(['1.txt', '2.txt', '3.txt']);
我想知道同时读取多个文件最有效的方法是什么。 我有一个文件路径数组,我想使用根据路径数组的索引排列的 fs 读取文件(不是 asyncRead 并且不使用回调函数)创建一个数据数组。 我需要同时读取三个文件,我找不到如何同时读取文件。
我找到了这个方法,但无法弄清楚它是否同时读取文件,如果是的话如何:
***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());
});
});
}***
我们可以使用util.promisify to create a promise based version of fs.readFile,然后使用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']);
const fs= require('fs').promises;
async function readFiles(files) {
const results = await Promise.allSettled(files.map(file=> fs.readFile(file)));
console.log(results);
return results;
}
readFiles(['1.txt', '2.txt', '3.txt']);