递归setTimeout模式

时间:2016-04-29 04:25:54

标签: javascript jquery

在阅读关于Long Polling的文章时,我对以下两种setInterval

之间的混淆感到困惑

1 -

setInterval(function(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);
    }, dataType: "json"});
}, 30000);

2-

(function poll() {
   setTimeout(function() {
       $.ajax({ url: "server", success: function(data) {
            sales.setValue(data.value);
       }, dataType: "json", complete: poll });
    }, 30000);
})();

根据博客的说法 - 关于第二个片段,

  

因此,此模式不保证在固定的时间间隔内执行   SE。但是,确实保证了之前的间隔已经完成   在下一个间隔被称为之前。

为什么第二个片段保证前一个间隔已完成?

我知道第一个(事件循环),但对第二个片段感到困惑。

1 个答案:

答案 0 :(得分:3)

  

为什么第二个片段保证前一个间隔已完成?

首先,以一段时间调用示例$.ajax(),无论先前的$.ajax()调用是否完成。

poll的{​​{1}}函数之前,第二个示例complete不再被调用。