我想在NodeJS中异步读取多个文件。当阅读顺序无关紧要时,最好同时阅读多个文件。
但是,我试图将这些文件的内容一起写入一个文件。我可以写一个文件,但是如何在将所有内容写入该文件之前确保已经读取了所有文件?
答案 0 :(得分:1)
用户承诺采用以下方法之一
然后将所有这些承诺保存到数组中并使用Promise.all
其他方式可以是迭代变量,即var filesRead = 0
。读取文件时,请增加此编号filesRead++
。在此之后,请务必检查,如果您阅读了所有文件,如果是,则可以进行写作
if (filesRead === numberOfFilesToRead){
//write things
}
答案 1 :(得分:1)
使用async
:
'use strict';
let fs = require('fs'),
async = require('async'),
inputs = ['in1', 'in2'],
output = 'out';
function fuse(inputs, output, callback) {
async.map(inputs, (path, callback) => {
fs.readFile(path, (data) => {
callback(null, data);
});
}, (err, contents) => {
if(error) {
callback(error);
} else {
fs.writeFile(output, contents.reduce((a, b) => {
return a + b;
}), (error) => {
callback(error);
});
}
});
}
fuse(inputs, output, (error) => {
if(error) {
console.log('Error: ' + error);
} else {
console.log('OK');
}
});