2012-08-07 70 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

这是一个懒惰列表。它是异步行为的包装。您正在尝试在列表填充之前检查列表,因此当然不起作用。

这个问题与封闭无关。这完全是关于异步行为。

我没有看到任何允许通用“完成时”回调的惰性列表代码。