I have this javascript function, which uses a timer to call an ajax file every 2 seconds.
However, I see that this data is sent to the ajax file before the execution of previous data is complete. That is, it sends the whole list in about 10 seconds, while the data takes around 120 seconds to be processed.Is there a way, I can send the next data node, only when the previous has finished processing?
cb.call(this)
is being used to call a function, when this timer is finished,
querylimit
is a response variable, which exits the function if its true.
var i = 0;
var querylimit=false;
function refr开发者_开发知识库eshTimer(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);
}
Regards
Nikhil GuptaI typically setup what I call a "cascade", which is a chain reaction of window.setTimeout(...) calls, rather than a single window.setInterval(...) call.
Instead of:
function requestAjaxData() {
// prep ajax / call onAjaxDataReceived on success.
}
function onAjaxDataReceived() {
// process data
}
window.setInterval(requestAjaxData, 2000);
I do:
function requestAjaxData() {
// prep ajax / call onAjaxDataReceived on success.
}
function onAjaxDataReceived() {
// process data
// continue the cascade
requestAjaxDataCascade();
}
function requestAjaxDataCascade() {
window.setTimeout(requestAjaxData, 2000);
}
requestAjaxDataCascade();
精彩评论