我无法理解为什么在以下函数中不会调用回调。奇怪的是,除else
块中的回调之外的其他所有内容都会被调用。将回调放在if
语句中的任何位置也可以。
我无法弄清楚为什么它会跳过回调。
var get_page = function(options, callback){
request_wrapper(c_url(options), function(xml){
parseString(xml, function (err, result) {
if(result["feed"]["entry"] != undefined){
async.eachSeries(result["feed"]["entry"], function(entry, iter) {
total_entries++;
iter();
},function(){
options.start = total_entries;
get_page(options, function(){
});
});
// callback({}); works anywhere in the if statement.
}else{
callback({}); // Doesn't work here.
// But this shows.
console.log("TOTAL ENTRIES HERE: "+total_entries);
//So why is callback in the same block not being called?
}
});
});
}
这是我来电的功能,如果有帮助的话。正如我所说,它确实输出,而不是在else块中。
exports.scrape = function(options, callback){
get_page(options, function(ob){
console.log(ob);
});
}
更新: 我只是偶然发现了答案。递归调用不应该是这样的:
get_page(options, function(){
});
它应该在函数参数中包含回调,如下所示:
get_page(options, callback);
这是我的问题的解决方案,但我不确定我理解它的工作原理。谢谢你的帮助。
答案 0 :(得分:0)
你是否曾尝试将回调执行放在if / else之后?
@project.should_receive(:msg).at_least(:once)
}