Javascript 递归设置超时模式

Javascript 递归设置超时模式,javascript,jquery,Javascript,Jquery,在阅读一篇关于的文章时,我对以下两种风格的setInterval 一,- 2- 根据博客上的说法——关于第二段 因此,这种模式不能保证每小时以固定的时间间隔执行 东南方。但是,它确实保证上一个间隔已经完成 在调用下一个间隔之前 为什么第二个代码段保证上一个间隔已经完成 我知道第一个(事件循环),但对第二个代码片段不太清楚 为什么第二个代码段保证上一个间隔已经完成 在第一个示例中,每隔一段时间调用$.ajax(),不管前面的$.ajax()调用是否完成 在第二个示例中,直到$.ajax()的com

在阅读一篇关于的文章时,我对以下两种风格的
setInterval

一,-

2-

根据博客上的说法——关于第二段

因此,这种模式不能保证每小时以固定的时间间隔执行 东南方。但是,它确实保证上一个间隔已经完成 在调用下一个间隔之前

为什么第二个代码段保证上一个间隔已经完成

我知道第一个(事件循环),但对第二个代码片段不太清楚

为什么第二个代码段保证上一个间隔已经完成

在第一个示例中,每隔一段时间调用
$.ajax()
,不管前面的
$.ajax()
调用是否完成


在第二个示例中,直到
$.ajax()的
complete
函数

为什么第二个代码段保证上一个间隔已完成?它保证上一个ajax已完成completed@Tushar事实上,这就是问题所在。为什么第一种方法不能保证同样的效果呢?如果AJAX在第二种方法中花费的时间超过30000毫秒,setTimeout只在第一次调用一次。它在ajax回调中再次被调用。因此,它保证ajax调用在第二次执行开始之前完成。而在第一种方法中,不管ajax结果如何,setInterval都会以固定的间隔调用函数。它不关心回调是否是前一次执行的结果。希望这有帮助。
setInterval(function(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);
    }, dataType: "json"});
}, 30000);
(function poll() {
   setTimeout(function() {
       $.ajax({ url: "server", success: function(data) {
            sales.setValue(data.value);
       }, dataType: "json", complete: poll });
    }, 30000);
})();