Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
chrome extension chrome.storage how to do a lot of get and set the same time and avoid race condition?
我从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
同步。
假设用户将在任何时候在一台计算机上使用此扩展,这将起作用。
相关文章:
- Haxe Javascript:在不使用Reflect的情况下按名称获取和设置属性
- 在Javascript ES6 Map中获取或设置元素
- 在node.js中使用JavaScript从JSON对象获取和设置文本内容
- javascript可以获取或设置打印机信息
- 从每个父对象获取attr,并为每个子对象设置attr
- 如何从区域设置获取日期格式
- jquery-plugin-1配置设置从另一个配置设置获取值
- 从控制器设置/获取服务中的数据
- 设置/获取文本节点值的方法
- 如何使用jQuery设置/获取全值隐藏字段
- 是否有一种非闪存方法来设置/获取 WebKit 中的剪贴板数据
- 在javascript中设置/获取样式高度
- Javascript:通过元素ID设置/获取元素
- 如何在使用Javascript设置/获取值时使日期时间字段与时区无关
- 在Node.JS中设置/获取env
- JavaScript对象设置/获取参数
- 使用cookie设置/获取输入值
- 访问chrome.storage.local的问题.从options.html中设置/获取
- 设置/获取动态自定义属性
- Javascript帮助设置/获取每个输入元素的本地存储数据