我在服务器中有以下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总是以angular
的形式返回empty array
。如果我在回复之前console.log(imageFiles)
,那么它也是空的。但是,如果我console.log(files)
他们都在那里。我做错了什么!?
答案 0 :(得分:0)
fs.readdir是一个异步函数。它在回调函数中完成传递文件。
因此,当您执行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();
});
欢迎使用异步编程:)
结帐async.js。它有助于解开回调地狱:
答案 1 :(得分:0)
由于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();
});