Javascript函数不返回对象
问题描述:
我正在学习如何为个人项目执行爬网程序(使用'cheerio')。爬行本身工作正常,但不知何故我正在构建的对象(eventDetails)没有被返回。您可以在下面看到,在函数级别声明的对象已正确填充请求,但不在其外部。你能帮忙吗?谢谢。Javascript函数不返回对象
function crawlEventDetails(eventLink){
var eventDetails = new Object();
//console.log(eventLink);
request(urlDomain + eventLink, function(err, response, html) {
if(err){
console.log(err);
}
else {
var $ = cheerio.load(html);
eventDetails.date = $('.detail.textsmall').eq(0).text();
eventDetails.time = $('.detail.textsmall').eq(1).text();
eventDetails.place = $('.detail.textsmall').eq(2).text();
eventDetails.price = $('.detail.textsmall').eq(3).text();
console.log(eventDetails); //OK!
}
});
console.log(eventDetails); //empty!
return eventDetails; // empty!
}
答
在异步函数可以完成之前,您正在返回对象。看看发送一个处理程序。即:
function crawlEventDetails(eventLink, handler){
var eventDetails = new Object();
//console.log(eventLink);
request(urlDomain + eventLink, function(err, response, html) {
if(err){
console.log(err);
}
else {
var $ = cheerio.load(html);
eventDetails.date = $('.detail.textsmall').eq(0).text();
eventDetails.time = $('.detail.textsmall').eq(1).text();
eventDetails.place = $('.detail.textsmall').eq(2).text();
eventDetails.price = $('.detail.textsmall').eq(3).text();
console.log(eventDetails); //OK!
handler(eventDetails); // Send aka "return" to handler
}
});
}
// call `crawlEventDetails()` function, and
// send an anonymous function to handle the response
crawlEventDetails(something, function(details){
console.log(details);
});
+0
我试过这一次,如果我管理它,我会让你知道它是否工作。谢谢。 – user3250118
花点时间了解回调函数。网上有很多可用的资源。 –
是的,我试图使用回调和/或研究异步/等待没有成功。我会做更多的研究,谢谢。 – user3250118