节点始终返回空数组

时间:2014-03-28 00:31:31

标签: javascript node.js angularjs

我在服务器中有以下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)他们都在那里。我做错了什么!?

2 个答案:

答案 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。它有助于解开回调地狱:

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

答案 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();
});