gpt4 book ai didi

javascript - 在 JavaScript 中处理队列时可能出现竞争条件?

转载 作者:行者123 更新时间:2023-12-02 17:34:01 25 4
gpt4 key购买 nike

我有一个属性数组,它们是需要通过 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(); 。我相信如果调用handleSuccess();在调用 addToQueue() 的过程中进行调用processQueue()来自addToQueue()将导致自 processing == true 起提前返回。但是,我对此还不够确定。

我的想法正确吗?

最佳答案

processing the AJAX call back interrupts processing of the actions that add/subtract properties to the queue.

没有。 JavaScript 是单线程的,同步代码中不会出现竞争条件。 ajax 回调在事件队列中排队,并将安排在任何当前执行的代码之后执行。

关于javascript - 在 JavaScript 中处理队列时可能出现竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com