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

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

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

command = {id:"1", type: "A", size: "B", priority: "C"}

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

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

有人可以建议我该怎么做吗?

谢谢!

最佳答案

扩展可以使用数据库:IndexedDB (示例代码可能看起来很复杂,但在实际扩展中非常简单,例如两个小函数 here 、 getStyles 和 saveStyle 或 IDB-keyval wrapper library )。

如果您想使用chrome.storage,只需维护一个由服务器监听器填充的全局queue数组即可:

queue.push(newItem);
updateStorage();

并在chrome.storage.local.get回调中处理:

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

关于javascript - 更新存储在 chrome 扩展本地存储中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38905362/

相关文章:

javascript - HTML5 localStorage.setItem 不适用于 iOS 8 - Safari 移动版

javascript - 如果尚未在 localStorage 中,如何将新对象推送到数组

javascript - 如何使用 jQuery 隐藏

javascript - 发送复选框组的值

javascript - 范围不更新模型中的更改

javascript - 创建新选项卡时隐藏 Chrome 扩展页面的 url

javascript - 无论如何在本地存储中使用星号或其他方法?

javascript - 从数据库获取配置设置以在 Angular 中跨应用程序共享

linux - Native Messaging 主机尝试发送长度为 460151579 字节的消息

javascript - CMD+R 在 chrome ://extensions/中不再工作