排队函数回调

时间:2013-08-11 15:57:03

标签: javascript callback

事件发生时会调用一些不同的函数。为简单起见,假设我发送了两个不同的分析跟踪请求。它们每个都有一个回调函数,可以在收到响应后重定向访问者。

function analytics(event,callback){
    // send analytics event;
    if (callback) callback();
}

function analytics2(event,callback){
    // send analytics2 event;
    if (callback) callback();
}

回调函数通常是:

If: tracking response is received from remote server

Then: redirect to URL

$("a").click(function(){
    analytics(
        'clicked on ' + $(this).attr('id'),
        function(){
            location.assign($(this).attr('href'));
        }
    );

    analytics2(
        'clicked on ' + $(this).attr('id'),
        function(){
            location.assign($(this).attr('href'));
        }
    );
});

问题:排队这些回调的最佳方法是什么,所以我等待所有回调函数在重定向之前准备就绪?现在,只要第一次回调运行,访问者就会被重定向 - 而不知道服务器是否收到了analytics2()函数。

我见过一些网站使用自己的队列系统,我根本不知道这是如何实现的。

有任何建议/想法吗?

我应该将analytics2()设置为anlaytics()的回调吗?但是如果我最终没有运行analytics()那么analytics2()将永远不会运行。理想情况下,我希望采用更有条理的方法。

1 个答案:

答案 0 :(得分:2)

$.when(analytics(), analytics2()).done(function(a1Result, a2Result){
    ... make decisions based on a1Result and a2Result
});

这是jQuery的promises版本,允许您进行两次异步调用并推迟任何决定,直到它们都完成为止。