javascript - 排队函数回调

标签 javascript callback

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

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

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

回调函数通常是:

如果:从远程服务器收到跟踪响应

然后:重定向到 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() 将永远不会运行。理想情况下,我希望采用更有条理的方法。

最佳答案

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

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

关于javascript - 排队函数回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18173817/

相关文章:

c++ - 捕捉屏保事件

javascript - 在这种情况下如何避免回调 hell ?

javascript - 如果包含一个变量,并且一个实例设置了一个具有相同名称的属性,那么该属性到哪里去了?

javascript - 在数组对象中查找元素

javascript - 如何处理和检查唯一ID?

javascript - 如何关闭 React Bootstrap Carousel 的自动播放?

javascript - 选择 2 ajax : preselected data in edit mode

javascript - 我的回调函数似乎没有填充我的数组?

python - 如何使用 swig 将 python 类实例作为 c++ 函数的参数传递?

javascript - 改进处理 promise 内部回调的方法