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不,它不起作用。假设2onCreated
快速触发。然后,首先2get
发生,然后2set
。状态出错。是否有简单的方法将localStorage
与chrome.storage
同步?还是我需要自己做?非常感谢。@mirtac您需要自己同步它们。您可以迭代本地存储以获取所有键值对,然后设置chrome.storage。很高兴这有帮助。