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

Fla*_*der 6 javascript google-chrome google-chrome-extension

我想做的事。

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

问题是什么。

问题是,这chrome.storage.local.get是对回调进行操作的异步函数:

chrome.storage.local.get('data',function(data){...})
Run Code Online (Sandbox Code Playgroud)

...并且没有内置方法来附加存储的某些对象。所以看来,data当需要添加某些内容时,添加 new 的唯一方法就是执行以下操作:

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

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

发送也是同样的情况...

chrome.storage.local.get('data',function(data){...}){
   chrome.storage.local.set({'data':[]},function(){})
   sendViaAjax(data);
}
Run Code Online (Sandbox Code Playgroud)

get由于清除是异步的,因此在和之间发生的某些事件的写入过程中可能会被清除set

问题是...

我该如何做才能避免某些数据丢失的可能性(或者至少将其最小化)?