0

我正在開發一個Chrome擴展,我將存儲服務器發送的對象。 例如,我將得到:更新存儲在擴展的本地存儲中的對象

命令= {ID: 「1」,類型: 「A」,大小: 「B」,優先級: 「C」}

如果我一個數據庫,我會把它作爲一行插入表commands。 使用chrome.storage,我將這些對象的數組存儲在密鑰commands中。

但是,當我接收服務器的新命令,我必須從本地存儲獲得,更新數組,然後重新設置。當我收到並設置或當我刪除存儲的命令時收到另一條命令時,我很擔心這種情況。我在考慮信號量,但我不知道這是否是一個好主意。

有人可以建議我該怎麼做?

謝謝!

+0

如何通過鏈接承諾確保所有先前的更改在開始新的更改之前完成? – Ozan

回答

0

擴展可以使用數據庫:IndexedDB(示例代碼可能看起來令人費解,但它在實際的擴展非常簡單,比如兩個小功能here,getStyles和saveStyle,或IDB-keyval wrapper library)。

如果你想使用chrome.storage,只是保持一個全球queue陣列由服務器監聽器填充:

queue.push(newItem); 
updateStorage(); 

chrome.storage.local.get回調處理:

function updateStorage() { 
    if (!queue.length) { 
     return; 
    } 
    chrome.storage.local.get('commands', function(data) { 
     data.commands = [].concat(data.commands || [], queue); 
     queue = []; 
     chrome.storage.local.set(data); 
    }); 
} 

如JavaScript引擎是單螺紋,沒有必要擔心queue可能會更改,而chrome.storage.local.get運行。