我在扩展程序中使用chrome.storage,并希望避免因同步或本地存储超过documented throttles之一而触发运行时错误。 (例如QUOTA_BYTES
,QUOTA_BYTES_PER_ITEM
)
我的第一选择是在生成运行时错误之前拦截这些错误;或者我可以跟踪扩展端的使用情况,并尽量避免触发它们。
这感觉就像某个人必须解决的问题,但我似乎无法找到任何解决方案 - 任何建议都值得赞赏。
答案 0 :(得分:0)
以下是我要使用的解决方案的示例(使用Angular,因此这里有promises),虽然必须正则表达chrome.runtime.lastError
值非常难看IMO:
var service = {
error: function(lastError) {
if((lastError) && (lastError.message)) {
var errorString = lastError.message;
if(/QUOTA_BYTES/.test(errorString)) {
return true;
} else if(/QUOTA_BYTES_PER_ITEM/.test(errorString)) {
return true;
} else if(/MAX_ITEMS/.test(errorString)) {
return true;
} else if(/MAX_WRITE_OPERATIONS_PER_HOUR/.test(errorString)) {
return true;
} else if(/MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE/.test(errorString)) {
return true;
}
return false;
} else {
return false;
}
},
write: function(key, value) {
var deferred = $q.defer();
var data = {};
data[key] = value;
chrome.storage.sync.set(data, function() {
if(service.error(chrome.runtime.lastError)) {
deferred.reject('Write operation failed: '
+ chrome.runtime.lastError.message);
} else {
deferred.resolve();
}
});
return deferred.promise;
}
};
return service;