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运行。