chrome 存储同步分解项目的算法
Algorithm to break down item for chrome storage sync
我正在尝试使用 chrome.storage.sync.set 保存一个字符串(更正:它是一个包含多个不同大小字符串的对象)但我收到错误:
错误:QUOTA_BYTES_PER_ITEM 超出配额
这是由于限制为 8092,所以我想将字符串分解成多个部分,然后在检索它们时能够重建它。
我给出现有错误的代码如下。
var obj = {};
obj[workspaceName] = stringToSave;
chrome.storage.sync.set(obj, function() {
if (chrome.runtime.lastError) {
return customAlert("Error!: " + chrome.runtime.lastError.message);
}
});
是否存在可以帮助我执行此操作的现有函数或代码?
写:生成一个像{foo0: chunkA, foo1: chunkB, foo2: chunkC, foo#: 3}
.
这样的对象
function chunkedWrite(key, value) {
return new Promise(resolve => {
if (typeof key !== 'string') key = `${key}`;
const str = JSON.stringify(value); // consider using LZString's compressToUTF16
const len = chrome.storage.sync.QUOTA_BYTES_PER_ITEM - key.length - 4;
const num = Math.ceil(str.length / len);
const obj = {};
obj[key + '#'] = num;
for (let i = 0; i < num; i++) {
obj[key + i] = str.substr(i * len, len);
}
chrome.storage.sync.set(obj, resolve);
});
}
读取分为两部分:先读取键数,然后一次读取所有键。
function chunkedRead(key) {
return new Promise(resolve => {
if (typeof key !== 'string') key = `${key}`;
const keyNum = key + '#';
chrome.storage.sync.get(keyNum, data => {
const num = data[keyNum];
const keys = [];
for (let i = 0; i < num; i++) {
keys[i] = key + i;
}
chrome.storage.sync.get(keys, data => {
const chunks = [];
for (let i = 0; i < num; i++) {
chunks.push(data[key + i] || '');
}
const str = chunks.join('');
resolve(str ? JSON.parse(str) : undefined);
});
});
});
}
删除类似于读取:读取key#,然后删除key数组。
function chunkedDelete(key) {
return new Promise(resolve => {
if (typeof key !== 'string') key = `${key}`;
const keyNum = key + '#';
chrome.storage.sync.get(keyNum, data => {
const num = data[keyNum];
const keys = [keyNum];
for (let i = 0; i < num; i++) {
keys.push(key + i);
}
chrome.storage.sync.remove(keys, resolve);
});
});
}
我正在尝试使用 chrome.storage.sync.set 保存一个字符串(更正:它是一个包含多个不同大小字符串的对象)但我收到错误: 错误:QUOTA_BYTES_PER_ITEM 超出配额
这是由于限制为 8092,所以我想将字符串分解成多个部分,然后在检索它们时能够重建它。
我给出现有错误的代码如下。
var obj = {};
obj[workspaceName] = stringToSave;
chrome.storage.sync.set(obj, function() {
if (chrome.runtime.lastError) {
return customAlert("Error!: " + chrome.runtime.lastError.message);
}
});
是否存在可以帮助我执行此操作的现有函数或代码?
写:生成一个像{foo0: chunkA, foo1: chunkB, foo2: chunkC, foo#: 3}
.
function chunkedWrite(key, value) {
return new Promise(resolve => {
if (typeof key !== 'string') key = `${key}`;
const str = JSON.stringify(value); // consider using LZString's compressToUTF16
const len = chrome.storage.sync.QUOTA_BYTES_PER_ITEM - key.length - 4;
const num = Math.ceil(str.length / len);
const obj = {};
obj[key + '#'] = num;
for (let i = 0; i < num; i++) {
obj[key + i] = str.substr(i * len, len);
}
chrome.storage.sync.set(obj, resolve);
});
}
读取分为两部分:先读取键数,然后一次读取所有键。
function chunkedRead(key) {
return new Promise(resolve => {
if (typeof key !== 'string') key = `${key}`;
const keyNum = key + '#';
chrome.storage.sync.get(keyNum, data => {
const num = data[keyNum];
const keys = [];
for (let i = 0; i < num; i++) {
keys[i] = key + i;
}
chrome.storage.sync.get(keys, data => {
const chunks = [];
for (let i = 0; i < num; i++) {
chunks.push(data[key + i] || '');
}
const str = chunks.join('');
resolve(str ? JSON.parse(str) : undefined);
});
});
});
}
删除类似于读取:读取key#,然后删除key数组。
function chunkedDelete(key) {
return new Promise(resolve => {
if (typeof key !== 'string') key = `${key}`;
const keyNum = key + '#';
chrome.storage.sync.get(keyNum, data => {
const num = data[keyNum];
const keys = [keyNum];
for (let i = 0; i < num; i++) {
keys.push(key + i);
}
chrome.storage.sync.remove(keys, resolve);
});
});
}