Мониторинг 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;
Другие вопросы по тегам