簡體   English   中英

節點總是返回空數組

[英]Node always returns empty array

我在服務器中有以下獲取請求...

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是一個異步函數。 它在傳遞文件的回調函數中完成。

因此,當您進行重新發送時,圖像文件為空。

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

由於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();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM