Я ищу и читаю об асинхронных функциях и обратных вызовах.Но я не смог решить свою проблему в течение недели.Я хочу сделать 'fs readfile' внутри цикла с порядком.Я пытаюсь сделать следующее, но у меня ничего не получается.
// on the code below, console.log print the value in random order and 'storedata' is empity.
// my goal is to do readfile in loop orderly and store the value
router.get("/files/readfiles", function(req,res){
var storedata= [];
var filenames= ["file1","file2","file3","file4"];
for (var i=0; i< filenames.length; i++){
fs.readFile('views/allfiles/'+ filenames[i] +'.ejs','utf8',function (err, data) {
if (err) throw err;
storedata.push(data);
console.log(data);
});
console.log(storedata); // this returns empty array
});
Я также пытаюсь по-другому:
router.get("/files/readfiles", function(req,res){
var filenames= ["file1","file2","file3","file4"];
filenames.forEach(readfiles);
function readfiles(value) {
var dataread = fs.readFile('views/allfiles/'+ value +'.ejs','utf8')
console.log (dataread);
}
});
на вышеупомянутой попытке я получаю ошибку: TypeError [ERR_INVALID_CALLBACK]:Обратный вызов должен быть функцией.
Я новичок в асинхронных методах, любая помощь, пожалуйста.