NodeJS + jsDom同步调用

时间:2012-12-02 15:47:45

标签: jquery node.js asynchronous web

我有一个相当棘手的任务,但NodeJS中有新手。

所以我需要循环遍历URL数组,从数组中获取每个页面,通过jsdom + jquery传递它,并在数组末尾添加新的finded URL。

首先看看任务很简单,但是由于NodeJS的Async,它变成了噩梦。

现在我有类似的代码(为了更好的理解而简化了它)

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概念,确定它的构造不起作用。 有人可以建议如何将它变成真实的现场吗?

2 个答案:

答案 0 :(得分:0)

我明确建议你花一些时间和lern异步行为,这是一个权力与它node.js毫无意义。您粘贴的代码有几个原因是错误的。

Plz,看看我实现的链接爬虫,对于我做的宠物项目。锄头有帮助。

https://github.com/alexanderbeletsky/freeze/blob/master/src/crawler.js

答案 1 :(得分:0)

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