节点总是返回空数组

我在服务器中有以下Get请求…

var imageFiles = []; var dir = 'public/img/'; fs.readdir(dir, function(err, files){ if (err) return console.error(err); files.forEach(function(file) { file = dir + file; imageFiles.push(file) }); }); res.send(imageFiles); res.end(); 

imageFiles总是以empty array返回到angular 。 如果我在console.log(imageFiles)响应之前它也是空的。 但是,如果我console.log(files)他们都在那里。 我究竟做错了什么!?

fs.readdir是一个asynchronous函数。 它在传递文件的callback函数中完成。

所以,当你做res.send时,图像文件是空的。

 var imageFiles = []; ... fs.readdir(dir, function(err, files){ // files is populated here after readdir returns. }); // this line executes before readdir returns res.send(imageFiles); 

您需要执行以下操作:

 var imageFiles = []; ... fs.readdir(dir, function(err, files){ ... res.send(imageFiles); res.end(); }); 

欢迎来到asynchronous编程:)

结帐async.js。 它有助于解开callback地狱:

http://www.sebastianseilund.com/nodejs-async-in-practice

由于Array.prototype.forEach是阻塞,你可以在foreEach语句之后调用你的其他方法。 ;

 fs.readdir(dir, function(err, files){ if (err) return console.error(err); files.forEach(function(file) { file = dir + file; imageFiles.push(file) }); res.send(imageFiles); res.end(); });