节点总是返回空数组
我在服务器中有以下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地狱:
由于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(); });