我不明白爲什麼在下面的函數中不會調用回調函數。奇怪的是,除了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);
這是我的問題的解決方案,但我不知道我明白它爲什麼起作用。謝謝您的幫助。
是'typeof運算callback'了'function'? –
你究竟知道它沒有被調用?您沒有發佈回調函數本身的樣子,也沒有發佈最初調用'get_page()'本身的方式。 – Pointy
是否因爲你的測試用例從未經過'else'塊? –