Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排队函数回调_Javascript_Callback - Fatal编程技术网

Javascript 排队函数回调

Javascript 排队函数回调,javascript,callback,Javascript,Callback,事件发生时会调用几个不同的函数。为了简单起见,假设我发出了两个不同的分析跟踪请求。它们都有一个回调函数,用于在收到响应后重定向访问者 function analytics(event,callback){ // send analytics event; if (callback) callback(); } function analytics2(event,callback){ // send analytics2 event; if (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()
设置为
analytics()
的回调?但是如果我最终没有运行
analytics()
,那么
analytics2()
就永远不会运行。理想情况下,我希望有一个更有条理的方法

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

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

试试!假设我们可以同时运行这两个分析,您是希望使用第一个收到响应的分析的推荐重定向,还是计划在做出重定向决定之前比较结果?我不认为我会比较任何东西。我只需要确保两个响应都已收到,并且很可能会重定向到所有这些函数的相同位置。请查看jQuery
.deferred()
.then()
方法。那么,对analytics2的要求在哪里?