http.get异步带来的困扰
webot.set('news',{
pattern: /new.*/i,
handler:function(info){
news = [];
http.get(address, function(res){
var data = '';
res.on('data' , function(d){
data += d;
}).on('error',function(err){
console.log(err.message);
});
res.on('end' , function(){
//分析HTML找到需要的内容,并赋给news
var $ = cheerio.load(data);
$('table').eq(2).find('table').eq(1).find('tr').slice(1,13)
.each(function(index,ele){
news[index] = {
title:this.find('a').first().text(),
url:this.find('a').attr('href')
};
})
}).on('error',function(err){
console.log(err.message);
});
}).on('error', function(err){
console.log(err.message);
});
return news;
}
});
用之前公布的微信ROBOT做一个微信机器人。分析HTML然后返回结果,作一个简单的爬虫。但是news被直接返回了,还没等到http.get执行完,这个时候应该怎么办,有什么异步返回方法么?
4 回复
看看async库
我看了一下源码的例子,他在里面用了中间件一层一层的处理,只要传一个next,调用后交给最后处理的函数就可以。