回调函数不会调用回调函数

时间:2015-10-19 22:35:40

标签: javascript asynchronous recursion callback

我无法理解为什么在以下函数中不会调用回调。奇怪的是,除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);

这是我的问题的解决方案,但我不确定我理解它的工作原理。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

你是否曾尝试将回调执行放在if / else之后?

@project.should_receive(:msg).at_least(:once)

}