Javascript chrome扩展chrome.storage如何在同一时间进行大量的获取和设置,并避免竞争条件?

Javascript chrome扩展chrome.storage如何在同一时间进行大量的获取和设置,并避免竞争条件?,javascript,google-chrome,google-chrome-extension,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

我从
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));
        });    
});

一种解决方案是将
localStorage
chrome.storage
结合使用

您可以使用
localStorage
从侦听器获取所有频繁的
get
set
。设置和获取本地存储是同步/阻塞的,因此无需担心竞争条件

然后,您可以决定将
localStorage
chrome.storage
同步的空闲时间/事件


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

您可以使用localStorage从侦听器获取和设置所有频繁的数据。设置和获取本地存储是阻塞的,因此需要担心竞争条件。然后,您可以决定将
localStorage
chrome.storage
同步的时间/事件。假设用户一次在一台计算机上工作,这是可行的。难道你不能把你的最后一个
控制台移动到no op
函数(){}
?@Teepeemm不,它不起作用。假设2
onCreated
快速触发。然后,首先2
get
发生,然后2
set
。状态出错。是否有简单的方法将
localStorage
chrome.storage
同步?还是我需要自己做?非常感谢。@mirtac您需要自己同步它们。您可以迭代本地存储以获取所有键值对,然后设置chrome.storage。很高兴这有帮助。