首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NodeJS + jsDom同步调用

NodeJS + jsDom同步调用
EN

Stack Overflow用户
提问于 2012-12-02 23:47:45
回答 2查看 1.5K关注 0票数 1

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

所以我需要循环遍历URL数组,从数组中获取每个页面,将其传递给jsdom+jquery,并在数组末尾添加新的查找到的URL。

乍一看,任务非常简单,但由于NodeJS的异步,它变成了噩梦。

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

代码语言:javascript
代码运行次数:0
运行
复制
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的概念,它的构造是不起作用的。有人能建议如何把它变成现实吗?

EN

回答 2

Stack Overflow用户

发布于 2012-12-10 03:50:44

我明确地建议你花点时间学习异步行为,这是一种没有它的能力,node.js是没有意义的。由于几个原因,您粘贴的代码是错误的。

请看一下我的链接爬虫的实现,为宠物项目我做。这有多大帮助。

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

票数 0
EN

Stack Overflow用户

发布于 2014-01-26 08:11:27

为此,您应该使用async.eachSeries()。当您有需要在循环中运行的异步代码时,应该始终使用异步库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13670863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档