更新存储在 chrome 扩展的本地存储中的对象
Update object stored in chrome extension's local storage
我正在开发 chrome 扩展,我将存储服务器发送的对象。
比如我会收到:
command = {id:"1", type: "A", size: "B", priority: "C"}
如果我有一个数据库,我会把它作为一行插入 table commands
。
使用 chrome.storage,我将这些对象的数组存储在键 commands
.
中
但是,当我收到服务器的新命令时,我必须从本地存储 get,更新数组,然后 set再次。我担心在获取和设置或删除存储的命令时收到另一个命令的情况。我正在考虑信号量,但我不知道这是否是个好主意。
有人可以建议我做什么吗?
谢谢!
扩展程序可以使用数据库:IndexedDB (the sample code may look convoluted, but it's pretty simple in the actual extensions, for example two small functions here, getStyles and saveStyle, or IDB-keyval wrapper library)。
如果您想使用 chrome.storage
,只需维护一个由服务器侦听器填充的全局 queue
数组:
queue.push(newItem);
updateStorage();
并在 chrome.storage.local.get
回调中处理:
function updateStorage() {
if (!queue.length || updateStorage.running) {
return;
}
updateStorage.running = true;
chrome.storage.local.get('commands', data => {
data.commands = [].concat(data.commands || [], queue);
queue = [];
chrome.storage.local.set(data, () => {
updateStorage.running = false;
if (queue.length) updateStorage();
});
});
}
我正在开发 chrome 扩展,我将存储服务器发送的对象。 比如我会收到:
command = {id:"1", type: "A", size: "B", priority: "C"}
如果我有一个数据库,我会把它作为一行插入 table commands
。
使用 chrome.storage,我将这些对象的数组存储在键 commands
.
但是,当我收到服务器的新命令时,我必须从本地存储 get,更新数组,然后 set再次。我担心在获取和设置或删除存储的命令时收到另一个命令的情况。我正在考虑信号量,但我不知道这是否是个好主意。
有人可以建议我做什么吗?
谢谢!
扩展程序可以使用数据库:IndexedDB (the sample code may look convoluted, but it's pretty simple in the actual extensions, for example two small functions here, getStyles and saveStyle, or IDB-keyval wrapper library)。
如果您想使用 chrome.storage
,只需维护一个由服务器侦听器填充的全局 queue
数组:
queue.push(newItem);
updateStorage();
并在 chrome.storage.local.get
回调中处理:
function updateStorage() {
if (!queue.length || updateStorage.running) {
return;
}
updateStorage.running = true;
chrome.storage.local.get('commands', data => {
data.commands = [].concat(data.commands || [], queue);
queue = [];
chrome.storage.local.set(data, () => {
updateStorage.running = false;
if (queue.length) updateStorage();
});
});
}