【发布时间】:2014-04-01 17:52:44
【问题描述】:
我有一组属性,它们是对象的子对象,需要通过 AJAX 调用对数据库进行持久化。但是,API 现在的工作方式(这不太可能改变)我不能批量发送字符串,如果我使用简单的循环发送它们,它们将相互覆盖。所以我需要将加减法作为一个FIFO队列来处理。
我只是想验证我的想法是否正确,因为处理 AJAX 回调会中断对队列添加/减去属性的操作的处理。
代码(使用 jQuery $.ajax 进行速记):
var queue = [],
processing = false;
function processQueue() {
if(queue.length <= 0) {
processing = false;
return;
}
if(processing) {
return;
}
processing = true;
var cmd = queue.unshift();
$.post(cmd.location, cmd.payload, function handleSuccess() {
processing = false;
processQueue();
});
}
function addToQueue(url, payload) {
queue.push({ location: url, payload: payload });
processQueue();
}
我主要关心的是哪个processQueue(); 呼叫在第一个呼叫之后首先进行。假设我已经在队列中添加了一些东西,然后调用了processQueue();。我相信,如果在调用addToQueue() 的过程中调用handleSuccess();,那么从addToQueue() 调用processQueue() 将导致自processing == true 以来的提前返回。但是,我对此还不够确定。
我的想法正确吗?
【问题讨论】:
标签: javascript ajax queue