Есть вопрос который давно меня мучает. Функции вроде chrome.storage.sync
имеют какой-то механизм защиты что-ли или просто в области видимости дело, непонятно.
Пишу приложение, уже задавал вопросы по методу сохранения данных, но все же необходимо сократить код так что-бы функции типа chrome.storage.sync.get()
или chrome.storage.sync.set()
были зашиты в отдельные функции в примерно такой конструкции:
function get_option_storage(option_name) {
var result = false;
chrome.storage.sync.get( option_name, function(func_result) {
result = func_result;
});
return result;
}
и для установки
function set_option_storage(option_name, option_value) {
var result = false;
chrome.storage.sync.set( {option_name: option_value}, function() {
result = true;
});
return result;
}
Пришел к этому из-за высокого количества запросов на сохранение и чтение данных из хранилища, поэтому хочу зашить в отдельные функции методы работы с хранилищем и вызывать уже свои, как это можно сделать и можно ли вообще?
Почти все методы chrome.*
, имеющие коллбеки — асинхорнные. Соответственно, асинхорнные методы не возвращают какие-либо данные. Это не механизм защиты и даже не область видимости — это фича, которую завезли для увеличения скорости сценариев JavaScript.
О том, что такое асинхронные методы, я, как мне кажется, доступно объяснил в ответе на этот вопрос: Поиск элементов на странице и API VK. Если интересно, то почитайте.
Что можно сделать:
Используйте Promises. Статьи по этой теме:
Используйте готовое решение в виде полифилла от Mozilla: mozilla/webextension-polyfill. Он немного сыроват, но добавить поддержку Promises с ним довольно просто. Обратите внимание на то, что данный полифилл покрывает не все методы (некоторые непопулярные методы придется добавлять ручками), а также немного меняет API.
Но от кастомных функций вида get*, которые что-то возвращают через return
, все же придется отказаться. Единственное, что могу посоветовать — перестраивайте структуру приложения или используйте коллбеки вместо return
.
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Уважаемые знатоки React! Подскажите, как правильно организовать подключение и использование компонента, который хранится в отдельном файле?...