如何使用fs读取两个文件并以某种方式提供结果,我可以在其中比较它们。我看了this,但它略有不同,我找不到办法去做我需要的东西。
我可以从回调中调用diffChars
,但是如何处理两个回调函数?
fs.readFile('/abc1.txt', function (err, data1) {
console.log(data1);
});
fs.readFile('/abc1.txt', function (err, data2) {
console.log(data2);
});
later I want to do like this
var fileDiff = require("diff");
var difference = fileDiff.diffChars(data1,data2);
cnsole.log(difference);
注意:由于npm代理存储库
,我对可以使用的库具有限制性答案 0 :(得分:4)
这是Promise
和Promise.all
的完美案例。
function readFile(name) {
return new Promise((resolve, reject) =>
fs.readFile(name, function (err, data) {
if (err) { reject(err); }
resolve(data);
});
});
}
Promise.all(readFile('file1'), readFile('file2')).then(data => {
var file1 = data[0];
var file2 = data[1];
});
答案 1 :(得分:1)
您不需要回调功能。您可以使用fs.readFileSync()
。
编辑但是,fs.readFileSync()
正在阻止,只有在函数返回后才会执行下一行。
如果你坚持使用回调:
fs.readFile("abc123.txt", (error1, data1) => {
if (error1) {
return;
}
fs.readFile("abc456.txt", (error2, data2) => {
if (error2) {
return;
}
console.log(data1 === data2);
});
});
答案 2 :(得分:0)
Node使用异步编码风格。 因此,当您正在读取文件时,第二个文件也正在被读取,并且下一个代码正在执行。 因此,您可以使用承诺或回调。 这是一个解决方案
fs.readFile('/abc1.txt', function (err, data1) {
console.log(data1);
fs.readFile('/abc1.txt', function (err, data2) {
console.log(data2);
var fileDiff = require("diff");
var difference = fileDiff.diffChars(data1,data2);
console.log(difference);
});
});
或使用像
这样的承诺var data;
fs.readFile('/abc1.txt')
.then((data1)=>{
data = data1;
return(fs.readFile('/abc1.txt'))
})
.then((data2)=>{
var difference = fileDiff.diffChars(data1,data2);
return(difference)
})
/* do what ever you want here*/
.catch((err)=>{throw err;})