2014-10-14 3 views
1

Я использую chrome.storage в расширении и хотел бы избежать запуска ошибок во время выполнения из-за превышения одного из documented throttles для синхронизации или локальных магазинов. (например, QUOTA_BYTES, QUOTA_BYTES_PER_ITEM)Мониторинг пределов дросселя chrome.storage

Моим первым выбором было бы перехватить эти ошибки до генерируемой ошибки времени выполнения; В качестве альтернативы я мог отслеживать использование на стороне расширения и стараться не запускать их.

Это похоже на проблему, с которой кто-то должен был обратиться, но я не могу найти никаких решений - любые одобряемые предложения.

ответ

0

Вот пример решения я собираюсь с (используя угловые, так что есть 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; 
Смежные вопросы