完成后10秒重复运行一个函数(JavaScript)
问题描述:
我有一个函数使用“post”从服务器获取数据并对其进行处理。数据量不尽相同,功能可能需要很长时间才能完成(30秒)。我希望重复调用这个函数,但是只有在它完成前一次迭代之后的10秒钟。 *函数的结果存储在全局函数中,并在相同函数的下一次迭代中使用。 我试过setInterval和setTimeout,但是这些似乎都没有给我我要找的结果。 有什么想法?完成后10秒重复运行一个函数(JavaScript)
答
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);
}
这是工作非常细,对我来说。
为什么setInterval没有给你想要的输出?你可以解释吗 ? – taesu 2015-02-11 04:08:56
向我们显示您的代码,以便我们可以看到最新进展ob – 2015-02-11 04:10:53
@taesu间隔在涉及Ajax请求时不起作用。 OP希望在通话完成和处理后10秒。 – epascarello 2015-02-11 04:13:38