Node.js NodeJS-如何异步读取多个文件并将读取内容写入一个文件
我想在NodeJS中异步读取多个文件。当读取顺序无关紧要时,最好同时读取多个文件Node.js NodeJS-如何异步读取多个文件并将读取内容写入一个文件,node.js,asynchronous,read-write,Node.js,Asynchronous,Read Write,我想在NodeJS中异步读取多个文件。当读取顺序无关紧要时,最好同时读取多个文件 但是,我正在尝试将这些文件的内容一起写入一个文件。我可以很好地编写一个文件,但在我将所有内容写入该文件之前,如何确保所有文件都已读取?用户通过以下方法之一承诺: 创建承诺,读取文件时解析每个承诺 使用bluebird为fs创建类似Promise的方法 使用模块 然后将所有这些承诺保存到数组中并使用 另一种方法是迭代变量,即var filesRead=0。读取文件时,增加此数字filesRead++。在此之后,始终检
但是,我正在尝试将这些文件的内容一起写入一个文件。我可以很好地编写一个文件,但在我将所有内容写入该文件之前,如何确保所有文件都已读取?用户通过以下方法之一承诺:
var filesRead=0
。读取文件时,增加此数字filesRead++
。在此之后,始终检查,如果您读取了所有文件,如果是,您可以进行写入
if (filesRead === numberOfFilesToRead){
//write things
}
用户通过以下方法之一作出承诺
var filesRead=0
。读取文件时,增加此数字filesRead++
。在此之后,始终检查,如果您读取了所有文件,如果是,您可以进行写入
if (filesRead === numberOfFilesToRead){
//write things
}
使用:
“严格使用”;
设fs=require('fs'),
async=require('async'),
输入=['in1','in2'],
输出='输出';
功能保险丝(输入、输出、回调){
map(输入,(路径,回调)=>{
fs.readFile(路径,回调);
},(错误,内容)=>{
如果(错误){
回调(错误);
}否则{
fs.writeFile(输出,内容.减少((a,b)=>{
返回a+b;
}),回调);
}
});
}
保险丝(输入、输出,(错误)=>{
如果(错误){
console.log('错误:'+错误);
}否则{
console.log('OK');
}
});
编辑:
使用承诺:
“严格使用”;
常量fs=require('fs'),
输入=['in1','in2'],
输出='out'
//Promisify fs.readFile
函数读取(文件){
返回新承诺((解决、拒绝)=>{
fs.readFile(文件,(错误,数据)=>{
如果(错误){
拒绝(错误);
}否则{
解析(数据);
}
});
});
}
//Promisify fs.writeFile
函数写入(文件、数据){
返回新承诺((解决、拒绝)=>{
fs.writeFile(文件、数据,(错误)=>{
如果(错误){
拒绝(错误);
}否则{
解决();
}
});
});
}
Promise.all(inputs.map(read))//读取所有文件
。然后((data)=>{//data将是文件中的数据数组
const outData=data.reduce((a,b)=>{
返回a+b;//连接数据
})
返回write(output,outData);//写入输出
})
.然后(()=>{
console.log('OK');
})
.catch((错误)=>{
控制台错误(error);
});
(未经测试,但总体思路在此)
正如libik所指出的,fs promise
、util.promisify
或bluebird
是promisifyfs.readFile
和fs.writeFile
的替代品,使用:
“严格使用”;
设fs=require('fs'),
async=require('async'),
输入=['in1','in2'],
输出='输出';
功能保险丝(输入、输出、回调){
map(输入,(路径,回调)=>{
fs.readFile(路径,回调);
},(错误,内容)=>{
如果(错误){
回调(错误);
}否则{
fs.writeFile(输出,内容.减少((a,b)=>{
返回a+b;
}),回调);
}
});
}
保险丝(输入、输出,(错误)=>{
如果(错误){
console.log('错误:'+错误);
}否则{
console.log('OK');
}
});
编辑:
使用承诺:
“严格使用”;
常量fs=require('fs'),
输入=['in1','in2'],
输出='out'
//Promisify fs.readFile
函数读取(文件){
返回新承诺((解决、拒绝)=>{
fs.readFile(文件,(错误,数据)=>{
如果(错误){
拒绝(错误);
}否则{
解析(数据);
}
});
});
}
//Promisify fs.writeFile
函数写入(文件、数据){
返回新承诺((解决、拒绝)=>{
fs.writeFile(文件、数据,(错误)=>{
如果(错误){
拒绝(错误);
}否则{
解决();
}
});
});
}
Promise.all(inputs.map(read))//读取所有文件
。然后((data)=>{//data将是文件中的数据数组
const outData=data.reduce((a,b)=>{
返回a+b;//连接数据
})
返回write(output,outData);//写入输出
})
.然后(()=>{
console.log('OK');
})
.catch((错误)=>{
控制台错误(error);
});
(未经测试,但总体思路在此)
正如libik所指出的,fs promise
、util.promisify
或bluebird
是promisifyfs.readFile
和fs.writeFile
的替代品