Node.js:代码在web请求完成之前一直运行
Node.js: Code keeps running before web request finishes
这是我的代码不能工作的部分:
var companiesUrls = [];
var companiesUrls2 = [];
request(site+companiesPath, function(err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('a', '#group-content').each(function(){
var url = $(this).attr('href');
companiesUrls.push(url);
});
console.log(companiesUrls.length);
}
});
console.log(companiesUrls);
for(var i=0;i<companiesUrls.length;i+=2){
companiesUrls2.push(companiesUrls[i]);
};
console.log(companiesUrls2);
下面是这段代码的输出:
[]
[]
102
我的理论是node.js的"非阻塞"性质导致请求在其余代码之后运行。因此,for循环得到的是空数组而不是包含102个元素的数组
我怎么能解决这个问题?
var companiesUrls = [];
var companiesUrls2 = [];
request(site+companiesPath, function(err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('a', '#group-content').each(function(){
var url = $(this).attr('href');
companiesUrls.push(url);
});
console.log(companiesUrls.length);
}
console.log(companiesUrls);
for(var i=0;i<companiesUrls.length;i+=2){
companiesUrls2.push(companiesUrls[i]);
};
console.log(companiesUrls2);
});
好,很简单。但是如果代码需要在函数中运行呢?常见的解决方案是提供回调函数作为函数的参数。节点代码经常使用回调是很常见的,因为从性能的角度来看,这通常是最好的方法。
function getCompanyUrls(callback) {
var companiesUrls = [];
var companiesUrls2 = [];
request(site+companiesPath, function(err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('a', '#group-content').each(function(){
var url = $(this).attr('href');
companiesUrls.push(url);
});
console.log(companiesUrls.length);
}
console.log(companiesUrls);
for(var i=0;i<companiesUrls.length;i+=2){
companiesUrls2.push(companiesUrls[i]);
};
console.log(companiesUrls2);
callback(companiesUrls2);
});
}
getCompanyUrls(function( urls ) {
// do something with the resulting urls.
});
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 即使被信号处理程序中断,node.js代码也会一直运行到完成吗
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 防止请求动画帧一直运行
- 为什么 console.log() 一直在这个循环中运行
- 如何编写 nodejs 服务,一直运行
- 停止ParticleSystem一直运行
- NodeJS:一直在运行服务器
- 当我在django中运行服务器时,我收到了这个请求错误,i'我一直在使用引导程序
- 当运行javascript代码时,网页样式会一直恢复到默认设置
- 浏览器在运行使用json的ajax函数后继续加载(加载指示器一直在旋转)
- Node.js:代码在web请求完成之前一直运行
- Javascript代码运行良好.几乎一直都是
- Firefox扩展一直在后台运行
- Javascript一直在运行
- 我的Javascript函数一直在运行/循环