javascript - chrome 扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件?

标签 javascript google-chrome google-chrome-extension

我从 chrome.storage.local.get 获取一个对象,然后我想通过在回调中使用 chrome.storage.local.set 来更新该对象。

如果多次执行回调,则会发生竞争条件。我该怎么做才能避免这种情况?

我知道它可以通过jQuery.defer解决,但是有什么方法可以进行原子更新吗?或者有任何改进我的代码的建议吗?

下面是一个非常简单的例子:

chrome.tabs.onCreated.addListener(function(tab){//a lot of at the same time
    //just test
    chrome.storage.local.get(null, function(items) {
            if(!items.test){
                items.test=[];
            }
            items.test.push(something);
            chrome.storage.local.set(items,function(){});
            console.log('a'+JSON.stringify(items));
        });    
});

最佳答案

一种解决方案是将 localStoragechrome.storage 结合使用。

您可以使用localStorage来处理监听器中所有频繁的getset。设置和获取 localStorage 是同步/阻塞的,因此无需担心竞争条件。

然后,您可以决定一些空闲时间/事件来将 localStoragechrome.storage 同步。

假设用户随时在一台计算机上使用此扩展,这将起作用。

关于javascript - chrome 扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28917824/

相关文章:

google-chrome - 最新版本的 Chrome 中的 CSS3 动画更改?

javascript - 如何在实时网页中用 mailto 链接替换电子邮件地址?

javascript - 如何控制动态添加的输入类型文件?

google-chrome - 从服务器收到重复的 header

html - Chrome 与 Firefox 的垂直对齐方式不同( block 引用 :before)

javascript - chrome.tabs.executeScript 到 dataURI 选项卡

google-chrome-extension - 解压后的扩展程序的 Chrome 扩展程序 ID 是如何生成的?

javascript - Puppeteer page.click(selector) 不响应 IFrame

java - Websocket 聊天实现

javascript - 以编程方式操纵浏览历史记录