我需要實現事件隊列(=服務器上的更新)。新的事件將被添加到用戶時改變所述滑塊這個隊列,按下按鈕等。每個事件將包含以下屬性:如何實現事件隊列?
- 裝置ID(動作將被應用到該設備的服務器上)
- 操作(設置,獲取等)
- 值(value,應該在行動中使用)
新的事件應該有在年底增加。但是,如果已經有相同設備ID和相同操作的事件,則應該使用新值更新此事件。我應該怎麼做?
我已經起草了以下內容:
var inCall = false;
var queueArrayDevices = new Array();
var queueArrayActions = new Array();
var queueArrayValues = new Array();
// add call to the queue, at the end
function addAPICall(device, action, value){
// should NOT add event here, if device and action already exists
// should update the value instead
queueArrayDevices.push(device);
queueArrayAсtions.push(action);
queueArrayValues.push(value);
}
function doAPICall(device, action, value){
inCall = true;
// call server here
// if not successful, we should add this item to the queue again
inCall = false;
}
function callAPIQueue(){
if(!inCall && queueArrayDevices.length > 0){
device = queueArrayDevices.shift();
action = queueArrayAсtions.shift();
value = queueArrayValues.shift();
doAPICall(device, action, value);
}
}
// start queue processing
setInterval(callAPIQueue, 400);
使用jQuery移動,可能是它可以幫助我來簡化這些隊列創建?
謝謝,馬丁。這幾乎是我正在尋找的。只需要一個改變 - 事件應該從'doAPICall'的隊列中刪除,而不是提前(因爲我需要等待它的回覆,所以我在那裏調用服務器)。 –
那麼您可以將事件從callAPIQueue隊列中移動到doAPICall,並且應該按照您的意願進行操作。 –