将阵列保存到本地存储

时间:2017-07-23 10:41:23

标签: javascript arrays async-await local-storage firefox-webextensions

我是WebExtensions和JavaScript的新手。我尝试使用pageAction按钮编写一个小扩展程序,只需在点击时将当前网址保存到本地存储空间(即一些非常简单的“最喜欢的”功能)。但是,我在使用chrome.storage.local.set().get()时遇到了问题。我一直在查看this questionthis question中的代码,尝试将其重用于我的目的,但却失败了。这就是我现在所拥有的。

saveURL()函数应该将数组加载到本地存储中,使用新URL更新它,然后将其保存回本地存储(现在,我只有一个dud字符串,我是&m;试图推进那个阵列。)

async function saveURL() {
  console.log("Save URL called.");
  var urls = await loadURLs();
  console.log(urls);
  urls.push("a-new-url")
  console.log(urls);
  chrome.storage.local.set({'pearsurls': urls});
  urls = await loadURLs();
  console.log(urls);
  return true;
}

loadURLs()函数应该从本地存储中检索内容。我在storage.local.get()中使用默认值来在第一次使用时初始化数组。

function loadURLs(){
  var pearsurls = []
  console.log("Loading all saved URLs");
  chrome.storage.local.get({pearsurls: []}, function (result) {
    pearsurls = result.pearsurls;
    console.log(pearsurls)
  });
  console.log(pearsurls)
  return pearsurls;
}

控制台中的输出给了我:

Save page  save.js:52:3
Save URL called.  save.js:5:3
Loading all saved URLs  save.js:38:3
Array [  ]  save.js:43:3
Array [  ]  save.js:7:3
Array [ "a-new-url" ]  save.js:9:3
Loading all saved URLs  save.js:38:3
Array [  ]  save.js:43:3
Array [  ]

即。我的loadURLs()功能似乎没有做任何事......我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的loadURLs函数不是async或返回Promise,因此它会立即以空数组结束。

请改为尝试:

function loadURLs(){
  console.log("Loading all saved URLs");
  return new Promise((resolve, reject) => {
    console.log("Promise");
    chrome.storage.local.get({pearsurls: []}, function (result) {
      console.log(result.pearsurls);
      resolve(result.pearsurls);
    });
  });
}

注意:您的原始函数在chrome.storage.local.get完成其工作之前结束。数组pearsurls首先返回空,并在执行代码后随时使用回调function (result) ...进行填充。