更新存储在chrome扩展的本地存储中的对象

时间:2016-08-11 20:16:37

标签: javascript google-chrome-extension local-storage google-chrome-app

我正在开发chrome扩展程序,我将存储服务器发送的对象。 例如,我将收到:

  

command = {id:“1”,输入:“A”,大小:“B”,优先级:“C”}

如果我有一个数据库,我会在表commands中将其作为一行插入。 使用chrome.storage,我将这些对象的数组存储在键commands

但是,当我收到服务器的新命令时,我必须从本地存储中获取,更新阵列,然后再次设置。当我收到并设置或删除存储的命令时,我担心收到另一个命令的情况。我正在考虑信号量,但我不知道这是不是一个好主意。

有人可以建议我做什么吗?

谢谢!

1 个答案:

答案 0 :(得分: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可能会被更改。