Мониторинг chrome.storage пределы газа
Я использую chrome.storage в расширении и хотел бы избежать появления ошибок времени выполнения из-за превышения одного из задокументированных дросселей либо для синхронизации, либо для локальных хранилищ. (вещи как QUOTA_BYTES
, QUOTA_BYTES_PER_ITEM
)
Мой первый выбор - перехватить эти ошибки до того, как будет сгенерирована ошибка времени выполнения; в качестве альтернативы я мог бы отслеживать использование на стороне расширения и пытаться избежать их запуска.
Это похоже на проблему, которую кто-то должен был решить, но я не могу найти какие-либо решения - любые предложения приветствуются.
1 ответ
Вот пример решения, с которым я собираюсь (используя Angular, так что здесь есть обещания), хотя нужно было переопределить chrome.runtime.lastError
значение довольно уродливое ИМО:
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;