线程安全添加记录到chrome.storage.local

时间:2015-01-18 11:27:00

标签: javascript google-chrome google-chrome-extension

我想做什么。

我希望我的扩展程序能够在chrome.storage.local中存储有关浏览器使用情况的一些信息,如果收集的数据足够大,可以通过ajax将其发送到我的数据库,当然要清除它,这样相同的数据就不会出现。再次发送。

有什么问题。

问题是,chrome.storage.local.get是在回调上运行的异步函数:

chrome.storage.local.get('data',function(data){...})

...并且没有内置方法来追加存储的某个对象。所以看来,添加新的data的唯一方法就是做一些类似的事情:

chrome.storage.local.get('data',function(data){
   data.push('some new information');
   chrome.storage.local.set({'data' : data},function(){}
})

但这不安全。例如,当来自多个来源的大量数据出现时,会有很大的可能性,一些信息会丢失,因为很少有事件可以同时读取data,甚至不知道某些其他事件正在追加这些数据同时,基本上,只有最后一个(我的意思是执行时间)事件会正确写入,而其他所有事件都会被覆盖,因为当事件被触发时,其他记录还没有存储。

与发送相同的事情......

chrome.storage.local.get('data',function(data){...}){
   chrome.storage.local.set({'data':[]},function(){})
   sendViaAjax(data);
}

由于清算是异步的,因此在写入getset之间发生的某些事件时,可能会清除它。

问题是......

我如何做到正确,所以不会有可能(或者至少会被最小化)某些数据会丢失?

0 个答案:

没有答案