确保函数已完成。Javascript
我有下面的功能。我读取了几个Json文件并对其进行了解析,希望将它们包含到一个数组中并返回该数组。问题是如何确保函数确实读取了硬盘上的5个文件?我已尝试检查变量确保函数已完成。Javascript,javascript,jquery,node.js,Javascript,Jquery,Node.js,我有下面的功能。我读取了几个Json文件并对其进行了解析,希望将它们包含到一个数组中并返回该数组。问题是如何确保函数确实读取了硬盘上的5个文件?我已尝试检查变量I是否等于fileNameListLength-1,并检查函数是否以这种方式完成,但不起作用,for循环是在fs.readFile函数完成之前完成的。那么你将如何解决这个问题呢?。抱歉,问题可能重复 var fs = require('fs'); var urlToInfo = '/home/user/data'; function g
I
是否等于fileNameListLength-1
,并检查函数是否以这种方式完成,但不起作用,for循环是在fs.readFile
函数完成之前完成的。那么你将如何解决这个问题呢?。抱歉,问题可能重复
var fs = require('fs');
var urlToInfo = '/home/user/data';
function getRawData() {
var fileNameList = ['file_1', 'file_2', 'file_3', 'file_4', 'file_5'];
var fileNameListLength = fileNameList.length;
var rawDataArray = new Array();
for (var i = 0; i < fileNameListLength; i++) {
var url = urlToInfo + "/Data/" + fileNameList[i] + ".json";
fs.readFile(url, 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
try {
var portalData = JSON.parse(data);
rawDataArray[fileNameList[i]] = portalData;
} catch (e) {
// Error parsing JSON data
console.log("Error Parsing Json data.");
console.log(e);
}
});
}
//Make sure that all files have been read and that the rawDataArray contains all info
//return rawDataArray
}
var fs=require('fs');
var urlToInfo='/home/user/data';
函数getRawData(){
var fileNameList=['file_1','file_2','file_3','file_4','file_5'];
var fileNameListLength=fileNameList.length;
var rawDataArray=新数组();
对于(var i=0;i
您应该检查readFile cb中的条件,这应该很容易做到
但我建议你可以试试“承诺”
var fsp = require('fs-promise');
var files = ['foo1', 'foo2'];
// weird, files.map(fsp.readFile) does not work.
Promise.all(files.map(function (foo) {
return fsp.readFile(foo);
})).then(function (results) {
// process data
}, function (err) {
// error processing
})
您可以尝试使用
async
库和eachSeries
函数
var fs = require('fs');
var async = require('async');
var urlToInfo = '/home/user/data';
var rawArray = [];
async.eachSeries(fileNameList, function(fileName,callback){
var url = urlToInfo + "/Data/" + fileNameList[i] + ".json";
fs.readFile(url, 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
try {
var portalData = JSON.parse(data);
rawArray.push(portalData);
} catch (e) {
// Error parsing JSON data
console.log("Error Parsing Json data.");
console.log(e);
}
});
}, function(err){
console.log('the reading of all files finished');
console.log('array',rawArray);
});
这将串联执行函数并填充数组。当调用所有迭代器函数时,将执行回调函数。最简单的解决方案是同步执行,例如,
readFileSync
。