我有这个javascript函数,它使用一个计时器每2秒调用一次ajax文件 但是,我看到在完成先前数据的执行之前,此数据被发送到ajax文件。也就是说,它在大约10秒内发送整个列表,而数据需要大约120秒才能处理。
有没有办法,我可以发送下一个数据节点,只有当前一个数据节点已经完成处理?
当这个计时器结束时,cb.call(this)
被用来调用一个函数
而querylimit
是一个响应变量,如果它是真的,则退出该函数。
var i = 0;
var querylimit=false;
function refreshTimer(list,cb,i){
if (!(i >= 0)) { i= 0; }
setTimeout((function(chunk){
i++;
return function(){
if (querylimit) { cb.call(this); }
if(i <= list.length && !querylimit){
refreshTimer(list,cb,i);
refreshClients(chunk);
}
if(i == list.length+1) { cb.call(this); }
if(i > list.length+1 || querylimit) { return null; }
}
}) (list[i]), 2000);
}
问候
尼基尔古普塔
答案 0 :(得分:2)
我通常设置我所谓的“级联”,这是 window.setTimeout(...)调用的连锁反应,而不是单个 window.setInterval(.. 。)电话。
而不是:
function requestAjaxData() {
// prep ajax / call onAjaxDataReceived on success.
}
function onAjaxDataReceived() {
// process data
}
window.setInterval(requestAjaxData, 2000);
我做:
function requestAjaxData() {
// prep ajax / call onAjaxDataReceived on success.
}
function onAjaxDataReceived() {
// process data
// continue the cascade
requestAjaxDataCascade();
}
function requestAjaxDataCascade() {
window.setTimeout(requestAjaxData, 2000);
}
requestAjaxDataCascade();