完成后10秒重复运行一个函数(JavaScript)

完成后10秒重复运行一个函数(JavaScript)

问题描述:

我有一个函数使用“post”从服务器获取数据并对其进行处理。数据量不尽相同,功能可能需要很长时间才能完成(30秒)。我希望重复调用这个函数,但是只有在它完成前一次迭代之后的10秒钟。 *函数的结果存储在全局函数中,并在相同函数的下一次迭代中使用。 我试过setInterval和setTimeout,但是这些似乎都没有给我我要找的结果。 有什么想法?完成后10秒重复运行一个函数(JavaScript)

+0

为什么setInterval没有给你想要的输出?你可以解释吗 ? – taesu 2015-02-11 04:08:56

+0

向我们显示您的代码,以便我们可以看到最新进展ob – 2015-02-11 04:10:53

+0

@taesu间隔在涉及Ajax请求时不起作用。 OP希望在通话完成和处理后10秒。 – epascarello 2015-02-11 04:13:38

function a(){ 
//do stuff 

setTimeout(a, 10000); //has to be at the end of the execution. If you're doing things asynchronously that's a different story. 

} 

function setTimeout()可以用于此。但该方法必须首次被调用,然后函数本身再次调用该方法。

function method(){ 

     console.log('method invoked'); 
     setTimeout(method, 10000); 
    } 

    method(); 

function foo(){ 
    $.post("test.php", { name: "John", time: "2pm" }) 
     .done(function(data) { 
     // do your stuff with returned data 
     // and call itself again... 
     setTimeout(foo, 10000); 
    }); 
} 

这是不是办法的工作?

function Test() 
{ 
    //Your code here 

setTimeout(Test(),10000); 
//Its used to set time interval after your iteration is run 

} 
+1

欢迎来到[so]。请注意,有多个答案已经说过同样的事情,而且这个代码无法正常工作,因为'Test'在函数中立即被调用。 – 2015-02-11 10:37:47

var $id = 1; 
var Interval ; 
$(function(){ 
     callAjax();//Starts Interval 
}); 

functoin callAjax() 
{ 
Interval = setInterval(function() { 
      try { 
       if($id > 0) 
       { 
       $.ajax({ 
        url: _MyUrl + $id, 
        success: function (calbkData) { 
         $id = 0; 
         if (parseInt(calbkData.id) > 0) { 
          $id = calbkData.id; 
          OpenMsg(calbkData.id); 
         } 
        }, 
        global: false, // this makes sure ajaxStart is not triggered 
        dataType: 'json' 
        //,complete: longpoll 
       }); 
       } 
      } catch (e) { 
      //  alert(e); 
      } 

     }, 10000); 
} 

这是工作非常细,对我来说。