gpt4 book ai didi

javascript - 如何等待多个 fs.readFile 调用?

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:07 24 4
gpt4 key购买 nike

我的目标是从两个文件中读取数据并比较数据。我的输入文件是 result3.json 和 result4.json。这些文件中的数据以逗号分隔。

result3.json

[
"temp1.txt",
"temp2.txt",
]

Node :

function readFromFile(file) {
var fileNames = [];
//setTimeout(function() {
fs.readFile(file,function(err, data){
if (err) {
return console.log(err);
}
var temp = JSON.parse(data.toString().split(","));
// console.log(temp.length);
for (let index = 0; index < temp.length; index++) {
//console.log(temp[index]);
fileNames.push(temp[index]);
//console.log(fileNames[index]);
}
Done(); // to block the async call
});
//},3000);
//console.log(fileNames.length);
return fileNames;
}

var baseListOfFiles = readFromFile('./output/result3.json'); // Assume this is the base file
var currentListOfFiles = readFromFile('./output/result4.json'); // Assume this is the current file

function Done(){
//console.log('Out baseListOfFiles + ' + baseListOfFiles.length);
for (let index = 0; index < baseListOfFiles.length; index++) {
console.log("[baseListOfFiles] " + baseListOfFiles[index]);
}

//console.log('Out currentListOfFiles+ ' + currentListOfFiles.length);
for (let index = 0; index < currentListOfFiles.length; index++) {
console.log("[currentListOfFiles] " + currentListOfFiles[index]);
}

}

上面是我的代码。它似乎是异步调用,所以它总是返回 0 个文件名。有什么办法可以控制吗?

最佳答案

这是使用 Promises 的示例代码:

const fs = require('fs');

function readFromFile(file) {
return new Promise((resolve, reject) => {
fs.readFile(file, function (err, data) {
if (err) {
console.log(err);
reject(err);
}
else {
resolve(JSON.parse(data));
}
});
});
}

const promises = [
readFromFile('./output/result3.json'),
readFromFile('./output/result4.json')
];

Promise.all(promises).then(result => {
console.log(result);
baseListOfFiles = result[0];
currentListOfFiles = result[1];
// do more stuff
});

首先,构建一个数组promises;每个 Promise 读取文件,然后用结果调用 resolve
此数组传递给 Promise.all()然后 调用回调,以相同的顺序传递结果数组。

关于javascript - 如何等待多个 fs.readFile 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53832288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com