我想做什么。
我希望我的扩展程序能够在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);
}
由于清算是异步的,因此在写入get
和set
之间发生的某些事件时,可能会清除它。
问题是......
我如何做到正确,所以不会有可能(或者至少会被最小化)某些数据会丢失?