递归setTimeout模式

recursive setTimeout pattern

本文关键字:模式 setTimeout 递归      更新时间:2023-09-26

在阅读一篇关于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。但是,它确实保证前一个间隔已经完成然后调用下一个间隔

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

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

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

在第一个示例中,无论先前的$.ajax()调用是否完成,都以一定间隔调用$.ajax()

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