Javascript 嵌套nodejs请求的参数句柄
在某些父页面中,我需要一些子页面锚。我想抓取所有父页面,解析它们,然后获取子锚,跟踪锚,然后获取结果。但是当我编写代码时,我发现,在跟踪锚之前,锚url没有更改。以下是我的代码:Javascript 嵌套nodejs请求的参数句柄,javascript,node.js,Javascript,Node.js,在某些父页面中,我需要一些子页面锚。我想抓取所有父页面,解析它们,然后获取子锚,跟踪锚,然后获取结果。但是当我编写代码时,我发现,在跟踪锚之前,锚url没有更改。以下是我的代码: var req = require('request'); var cheerio = require('cheerio') var model = require('./model') function callnext(index){ var url = 'http://www.youku.com/sh
var req = require('request');
var cheerio = require('cheerio')
var model = require('./model')
function callnext(index){
var url = 'http://www.youku.com/show_episode/id_z2c9b63e691e611e2b356.html?dt=json&divid=reload_'+index+'&__rt=1&__ro=reload_21';
var result = req.get(url, function(error, response, body){
if (!error && response.statusCode == 200) {
var patt = /暂无内容/g;
var result = patt.test(body);
if(result){
return;
}
$ = cheerio.load(body);
var children = $('div').first().children();
for(var i=0;i<children.length;i++){
var item = $(children[i]);
var anchor = $(item.find('li>a')[0]).attr('href');
var labelText = $(item.find('label')[0]).text();
//TAG 1
req.get(anchor, function(error, response, body){
//TAG 2
console.log(anchor);
//here's my result
})
}
index = index+20;
callnext(index)
}
})
}
callnext(1);
在这段代码中,如果我在TAG1位置和TAG2位置记录锚url,结果会不同。
在标记1中,这是我预期的结果,但在标记2,它似乎只打印出父页面的第一个锚点
我试图更改代码并提取子请求函数,结果是正确的。为什么
var req = require('request');
var cheerio = require('cheerio')
var model = require('./model')
function crawlItem(url, text){
req.get(url, function(error, response, body){
console.log(url)
var inner = cheerio.load(body);
var text = inner('#text_long').text();
// model.Talk.create({ id: la, video: hr, youku_desc:text }).complete(function(err, album) {
// console.log(err);
// });
})
}
function callnext(index){
var url = 'http://www.youku.com/show_episode/id_z2c9b63e691e611e2b356.html?dt=json&divid=reload_'+index+'&__rt=1&__ro=reload_21';
var result = req.get(url, function(error, response, body){
if (!error && response.statusCode == 200) {
var patt = /暂无内容/g;
var result = patt.test(body);
if(result){
return;
}
$ = cheerio.load(body);
var children = $('div').first().children();
for(var i=0;i<children.length;i++){
var item = $(children[i]);
var anchor = $(item.find('li>a')[0]).attr('href');
var labelText = $(item.find('label')[0]).text();
// console.log(anchor);
crawlItem(anchor, labelText);
}
index = index+20;
callnext(index)
}
})
}
callnext(1);
看起来像是这个常见的问题@elclanrs在那个问题上,在我的理解中,我看起来像一个指针,它没有改变值,在循环之后,anymous函数引用了我,所以它得出了相同的结果,在我的第一个程序中,每次锚都被设置为一个新的变量,为什么会得出相同的结果?@elclanrs是否有任何文档可以解释这个关闭问题?跟那个问题本质上是一样的吧,循环里面声明函数容易导致这种问题。@osrpt感谢,我的意思是,刚那个问题,那个同一变量是我但是我这个例子里面,每次循环实际上我都重新赋值了一个新变量锚那为什么请求获取的时候还会出现相同的结果。换句话说,为什么TAG2,那里,请求获取总是在循环结束之后才会执行?