NodeJS回调

时间:2016-04-11 19:22:15

标签: javascript node.js callback

我一直在关注如何在Node JS中进行一些网页抓取的一系列教程

(我是一个完整的菜鸟,所以对任何问题的任何见解,无论多么基本,都有帮助)

我一直试图找到一种方法来保存我的阵列'网址'到一个文本文件,但遇到了几个问题 - 这是异步的,因为链接收集需要时间,我无法真正掌握回调如何在Node中工作。

这是我到目前为止所拥有的:

var request = require('request');
var cheerio = require('cheerio');
var links = [];

request('http://www.reddit.com', function(err, resp, body){
    if(!err && resp.statusCode == 200){
        var $ = cheerio.load(body);
        $('a.title', '#siteTable').each(function(){
            var url = $(this).attr('href');
            urls.push(url);
        });
        console.log(links);
    }
});

我在考虑简单地将整个'部分放在一起。在超时,它将给它足够的时间来编译链接列表,但我想看看更干净,更正确的方法是什么。

有人能告诉我如何使用回调,这样我可以设置一个打印功能来保存输出吗?

1 个答案:

答案 0 :(得分:0)

除了一个错误外,一切看起来都不错。您没有声明名为urls的数组,但您正在推送它。只需将urls.push(url);更改为links.push(url);即可

var request = require('request');
var cheerio = require('cheerio');
var links = [];

request('http://www.reddit.com', function(err, resp, body){
    if(!err && resp.statusCode == 200){
        var $ = cheerio.load(body);
        $('a.title', '#siteTable').each(function(){
            var url = $(this).attr('href');
            links.push(url);
        });
        console.log(links);
    }
});