2012-08-07 157 views
0

我想學習JavaScript與Node.js工作,顯然不完全封閉。 我嘗試逐行讀取文件,解析行並將結果放入數組並返回數組。這是我有(不太工作):javascript關閉和返回數組元素

var fs = require('fs'), Lazy = require('lazy'); 

function parseMyFile (filename) { 
    var myArray= []; 
    var lazy = new Lazy (fs.createReadStream(filename)); 

    lazy 
     .lines 
     .map(function(line){ 
      var parts = line.toString().split('|'); 

      var item = { 
       bucket: parts[1], 
       uri:  parts[2].substring(2), 
       token: parts[0], 
       fileDate: parts[3] 
      };   

      myArray.push (item); 
     }); 

    console.log(myArray); // empty 

     return myArray; 
}; 


var myItems = parseMyFile ('Tokens.csv'); 

我敢肯定,這與閉包有關,只是不太明白。任何幫助,將不勝感激。

謝謝!

+0

請詳細說明「不太工作」。 – Deestan 2012-08-07 13:09:45

+2

代碼本身似乎是正確的......你是否檢查了一個'console.log(line)'如果它正在做它應該做的地圖? – NicoSantangelo 2012-08-07 13:10:42

+0

@Deestan它是OP的代碼,但不是問題文本:「'console.log(myArray); // empty'」。 OP期望'myArray'在空時是非空的。 – apsillers 2012-08-07 13:11:18

回答

1

這是一個懶惰列表。它是異步行爲的包裝。您正在嘗試在列表填充之前檢查列表,因此當然不起作用。

這個問題與封閉無關。這完全是關於異步行爲。

我沒有看到任何允許通用「完成時」回調的惰性列表代碼。