如何将参数传递给 Chrome Storage get 函数,并将该参数设置为键?

How can I pass a parameter into the Chrome Storage get function, and set that parameter as the key?

所以我有这个功能,应该 return 使用 chrome 存储 API 设置键的保存值:

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

基本上,我正在查看所有具有相同 class 的元素,并保存它们的背景颜色值,并将键设置为它们的 ID。这就是我的意思(favBtnBG 只是一个 RGB 值):

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

问题是当我尝试调用 loadBtn 函数时,它 return 未定义。我是这样称呼它的(控制台注销未定义)

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

依我看,可能有两种错误。首先是我没有在存储中正确设置值。我认为在设置键时使用括号,变量id的值被用作键,而不是字符串id,但如果我错了请指正。

第二个可能的错误是我的loadBtn函数有问题。该函数在我开始将 id 传递给它之前就在工作,所以我认为我没有正确传递它。

话虽如此,如何正确地将参数传递给 storage.sync.get() 函数?

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

在这种情况下,id 的值被替换,如果您的存储如下所示:

{
      valueOfID: 'whateveryousetit'
}

然后您将登录 whateveryousetit。 如果您只想从存储密钥 ID 中读取,则:

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

使用此存储空间:

{
      id: 'yourvalue'
}

您将登录 yourvalue

我认为您不能像这样组合异步等待和承诺。 您可以这样调用当前的加载函数:

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

就我个人而言,我认为为存储获​​取创建承诺包装器是毫无意义的。 您可以使用以下语法使其非常干净:

chrome.storage.sync.get(['yourStorageKey'], ({ yourStorageKey }) => {
    console.log(yourStorageKey);
});