setInterval如何异步运行

时间:2018-08-31 05:49:44

标签: javascript ajax ecmascript-6 setinterval

我有一个setInterval函数,该函数运行调用服务器的异步代码:

setInterval(()=> {
    //run AJAX function here
}, 5000);

如果服务器在5秒钟内没有收到响应,则很有可能会再次运行set Interval,然后它将在同一个端点上发出多个请求,是否有一种方法是setInterval仅在AJAX函数返回响应?

3 个答案:

答案 0 :(得分:1)

您想要做的就是在收到响应时使用setTimeout

这是一些伪代码

const doAjaxWithDelay = (delay)=>{
  setTimeout(()=>{
    $.ajax({
    ...
    }).done(()=>{
    // do your staff 
      doAjaxWithDelay(5000)
    })
  },delay)
}
doAjaxWithDelay(0);

答案 1 :(得分:0)

改为使用setTimeout

function myTimer = () => {
  setTimeout(()=> {
    //run AJAX function here
    ajaxFunc();
  }, 5000);

function ajaxFunc() {
  //case success
    //do something
  // case failure
    // do something
  // finally
    myTimer();
}

myTimer()

答案 2 :(得分:-1)

我会添加一个这样的计数器:

var counter1 = 1;
var counter2 = 0;
setInterval( function() {

    if ( counter1 > counter2 ) {
        setTimeout( function() { /*Run Ajax Here*/ }, 5000 );
        counter2++;
     }

    else { console.log("Ajax hasn't responded yet"); }

});

如果响应成功,则counter1 ++; 将其放在AJAX代码中。