无法从 chrome.storage 获取数组

Unable to get array from chrome.storage

每当我尝试从 chrome.storage 获取数据时,它 returns undefined.

chrome.storage.sync.get('courses', function(result) {
      currentCourses = result.courses
      console.log(currentCourses)
      currentCourses.push(coursename)
      chrome.storage.sync.set({courses: currentCourses}, function() {
        alert(`Course "${coursename}" has been added !`)
      });
}
userCourses = async () => {
  await chrome.storage.sync.get('courses', function(result) {
      return(result.courses)
  });
}
courseData = userCourses()
console.log(courseData)

我找到了关于堆栈溢出的答案 here,但它给出了同样的错误。我是 JS 的新手,对 Promises 不太满意。

我尝试了官方文档中的example,但它也给出了如下相同的错误。 有人可以帮我解决问题,或者修改我的代码吗?

您将 chrome.storage.sync.get() 与完成回调一起使用。但请注意,您使用 .get() 方法检索的数据不可用,除非在回调中。

chrome.storage.sync.get(['key'], function(result) {
  console.log('Value currently is ' + result.key);
});

是文档中的示例。它是一个函数的调用。但该功能始终且必然 returns undefined.

请注意 .get() 的第一个参数是一个 键数组 。您的代码缺少数组。

第二个参数是回调函数。看起来像这样:

function (result) {
   
}

在函数中 result.key 是您请求的密钥,result.value 是您存储在密钥中的任何内容。您正在查看未定义的 result.courses

控制流程。

  1. .get() 的调用总是立即完成。
  2. 稍后调用回调。

将对存储的调用包装在一个承诺中并等待它:

function getStorageValuePromise(key) {
  return new Promise((resolve) => {
    chrome.storage.sync.get(key, resolve);
  });
}

await getStorageValuePromise('val');