我有这个 javascript 函数,它使用计时器每 2 秒调用一个 ajax 文件。
但是,我看到该数据是在之前的数据执行完成之前发送到ajax文件的。也就是说,它在大约 10 秒内发送整个列表,而处理数据大约需要 120 秒。
有没有办法,只有当前一个数据节点完成处理后,我才能发送下一个数据节点?
cb.call(this)
用于调用函数,当此计时器完成时,
而 querylimit
是一个响应变量,如果为 true,则退出该函数。
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);
}
问候
尼基尔·古普塔
最佳答案
我通常会设置所谓的“级联”,这是 window.setTimeout(...) 调用的链式 react ,而不是单个 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();
关于javascript - 将 JavaScript 计时器函数转换为使用异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209853/