Как я могу передать параметр в функцию Chrome Storage get и установить этот параметр в качестве ключа? - PullRequest
0 голосов
/ 04 апреля 2020

Итак, у меня есть эта функция, которая должна возвращать сохраненное значение установленного ключа с помощью chrome API хранилища:

 function loadBtn(id) {
  return new Promise(resolve => {
    chrome.storage.sync.get([id], function(result) {
      resolve(result.id);
    });
  });
}

По сути, я просматриваю все элементы с одинаковыми класс, и сохраняя их значение цвета фона, и ключ устанавливается в качестве их идентификатора. Вот что я имею в виду (favBtnBG это просто значение RGB):

$('.colorBtn').click(function() {
  let favBtnBG = await loadRbgVal();
  var id = $(this).attr('id');
  chrome.storage.sync.set({ [id]: favBtnBG });
})

Проблема в том, что когда я пытаюсь вызвать функцию loadBtn, она возвращает неопределенное значение. Вот как я это называю (консоль выходит из системы неопределенно)

$('.colorBtn').someListener(function() {
  highlightedRgbVal = await loadBtn($(this).attr('id'));
  console.log(highlightedRgbVal)
})

Как я вижу, могут быть две возможные ошибки. Во-первых, я неправильно устанавливаю значение в хранилище. Я думаю, что при использовании скобок при установке ключа в качестве ключа используется значение переменной id, а не строка id, но, пожалуйста, исправьте меня, если я ошибаюсь.

Вторая возможная ошибка - что-то не так с моей функцией loadBtn. Функция работала до того, как я начал передавать id в нее, поэтому я не думаю, что я передаю ее правильно.

С учетом сказанного, как правильно передать параметр в функцию storage.sync.get()?

1 Ответ

1 голос
/ 04 апреля 2020
const id = 'valueOfID';
chrome.storage.sync.get([id], function(result) {
      console.log(result[id]);
});

В этом случае подставляется значение id, и если ваше хранилище выглядит следующим образом:

{
      valueOfID: 'whateveryousetit'
}

, то вы войдете в систему whateveryousetit. Если вы просто хотите прочитать идентификатор ключа хранилища, то:

chrome.storage.sync.get(['id'], function(result) {
      console.log(result.id);
});

с этим хранилищем:

{
      id: 'yourvalue'
}

вы войдете в систему yourvalue

Я не Не думаю, что вы можете комбинировать asyn c await и такие обещания. Вы можете вызвать текущую функцию загрузки следующим образом:

loadBtn(id).then(idValueFromStorage) => {
   console.log(idValueFromStorage)
}

Лично я считаю, что создавать обертки обещаний для получения хранилища довольно бессмысленно. Вы можете сделать его довольно чистым с помощью следующего синтаксиса:

chrome.storage.sync.get(['yourStorageKey'], ({ yourStorageKey }) => {
    console.log(yourStorageKey);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...