我是一个相对较新的javascript开发人员,我遇到了一个我似乎无法追查的问题,我认为我可能正在寻找错误的位置。看起来它可能与范围/闭包有关,但我似乎无法让它工作。在这里:
我有一个名为arr
的全局范围数组。我使用node.js,request和cheerio来访问网站并获取信息 - 在此插图中,http://www.google.com上每个链接的href
属性。然后我将它们插入到全局范围的数组中。但是,在'request'之外,Array似乎仍然是空的。
var request = require('request');
var cheerio = require('cheerio');
var arr = []
var url = 'http://www.google.com';
request(url, function(err, resp, body) {
var $ = cheerio.load(body);
$('a').each(function(i, link){
arr.push(link['attribs']['href']);
});
});
console.log(arr); // prints nothing
我知道这很可能是我所忽视的非常简单的事情,但是如果有人可以帮我解释原因,我会非常感激。谢谢。
答案 0 :(得分:0)
实际上正在填充arr
。但是在请求调用完成之前,语句console.log(arr)
已被删除。这是因为node.js
的非阻塞属性。
您可以在循环中记录link['attribs']['href']
,您将看到arr
将首先作为空数组[]
打印,然后循环中的值将被打印。