递归setTimeout模式

Dip*_*ole 5 javascript jquery

在阅读一篇关于长轮询的文章时,我对以下两种风格的内容感到困惑setInterval

1 -

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

2-

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

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

因此,这种模式并不能保证在固定的时间间隔内执行.但是,它确保在调用下一个间隔之前完成前一个间隔.

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

我知道第一个(事件循环)但很少混淆第二个片段.

gue*_*314 3

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

首先,$.ajax()无论之前的$.ajax()调用是否完成,都会每隔一段时间调用一个示例。

在第二个示例中,直到的函数poll才被再次调用。complete$.ajax()