I get an object from chrome.storage.local.get
and then I want to update that object by using chrome.storage.local.set
in the callback.
If the callback is executed multiple times a race condition happens. What can I do to avoid this?
I know it can be resolved by jQuery.defer
, but is there any method to do an atomic update? Or any suggestions to improve my code?
Below is a very simple example:
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));
});
});
One solution is to use localStorage
in combination with chrome.storage
.
You can use localStorage
for all the frequent get
and set
from your listener. Setting and getting localStorage is synchronous/blocking so there is no need to worry about race conditions.
You can then decide some idle time/event to sync localStorage
with chrome.storage
.
This would work assuming that the user will be using this extension at one computer at any one time.