2012-12-02 57 views
1

我有一个相当棘手的任务,但在NodeJS新手。NodeJS + jsDom同步调用

所以我需要遍历URL数组,通过jsdom + jquery传递它,并在数组末尾添加新的finded URL。

首先查看任务非常简单,但由于NodeJS的异步,它变成了恶梦。

现在我有这样的代码(它简化了更好的理解)

var jsdom = require("jsdom"); 
var fs = require("fs"); 
var jquery = fs.readFileSync("./jquery.js").toString(); 

var fields = ['http://some.url/page.html'] 

for(var b=0, len = fields.length;b<len;b++){ 

jsdom.env({ 
     html: fields[b], 
     src: [jquery], 
     done: function (errors, window) { 
      var $ = window.$; 
      $("div.pager a").each(function() { 
       //Push new finded hyperlinks in array 
       fields.push($(this).attr('href')); 
      }); 

     } 
    }); 
    //recalculate actual length of array to make more loop 
    len=fields.length; 
} 

而且可以肯定它的建设是不是因为概念的NodeJS的工作。 有人可以建议如何将它变成真正的生活吗?

回答

0

您应该使用async.eachSeries()这一点。如果您需要在循环中运行异步代码,则应始终使用异步库。