我有一個屬性數組,這些屬性是需要通過對數據庫的AJAX調用來持久保存的對象的子對象。然而,現在API的工作方式(這是不太可能改變的),我無法批量發送字符串,如果我使用簡單的循環發送它們,它們將互相覆蓋。所以我需要處理添加和減法作爲FIFO隊列。在JavaScript中處理隊列時可能出現的競爭狀況?
我只是想驗證,如果我的想法是正確的,在處理AJAX回調中斷處理的行爲,添加/減去屬性的隊列。
代碼(使用jQuery $就速記):
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
以來的提前回報。但是,我不確定這一點。
我的思想正確嗎?