Задать вопрос
@hadaev_ivan

Google Chrome Extension, chrome.storage.local: как справится с асинхронностью?

Пользуюсь chrome.storage.local, мне нужно хранить массив доступный по ключу "block", и иметь возможность добавлять в него элементы. Но просто взять массив(.get(...)) и тут же вставить в него измененный (.set(...)) не получается. Мешает асинхронность я так понимаю. Как ее обойти?
Соорудил такую конструкцию:
var storage = chrome.storage.local,
      pb = {};  
pb.addBlock = function (value) {
    storage.get('block', function (item) {
      item = item || [];
      item.push(value);
      // ??? ваши предложения?)
      storage.set({block: item});
      // ??? ваши предложения?)
      return true;
    });
    return true;
  };

pb.addBlock('blabla');
//выкинет ошибку  Error in response to storage.get: TypeError: undefined is not a function

И догадываюсь почему не работает, нужно как-то ждать ответа сообразить не могу. Спасибо за внимание :)
  • Вопрос задан
  • 5394 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@hadaev_ivan Автор вопроса
Прошу прощения, вернулся к задачке и сразу нашел в чем моя проблема), асинхронность не при чем))
Рабочий код:
var storage = chrome.storage.local,
      pb = {}; 
pb.addBlock = function (value) {
    storage.get('block', function (item) {
      item = item.block || [];
//  тут я и попался переменная item ссылается на объект 'block' в котором будет массив, а не сам массив
      item.push(value);
//  .push() на объект как раз и выкинет в следствии ту ошибку
      storage.set({block: item});
    });
    };
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы