Javascript 有没有更优雅的方法来处理本地存储API的使用?

Javascript 有没有更优雅的方法来处理本地存储API的使用?,javascript,google-chrome-extension,firefox-addon,Javascript,Google Chrome Extension,Firefox Addon,我正在开发一个浏览器扩展,它使用本地存储来存储URL 本地存储用于后台脚本和用于弹出和扩展选项的脚本中 每当函数需要这些站点时,它基本上会调用API来检索它们。 但我想知道,是否有更好的方法来获取这些数据,而不是一直从多个函数调用API。(例如,将其存储在文件或变量中) 目前,我检索的数据如下: let whiteList = browser.storage.local.get("whiteList"); whiteList.then((res) => {

我正在开发一个浏览器扩展,它使用本地存储来存储URL

本地存储用于后台脚本和用于弹出和扩展选项的脚本中

每当函数需要这些站点时,它基本上会调用API来检索它们。 但我想知道,是否有更好的方法来获取这些数据,而不是一直从多个函数调用API。(例如,将其存储在文件或变量中)

目前,我检索的数据如下:

let whiteList = browser.storage.local.get("whiteList");
  whiteList.then((res) => {
    // check if there are any blacklisted sites
    if (!res.whiteList || res.whiteList.left < 1) {
      whiteListedSites = [];
      // parse blackListed sites to object
    } else {
      whiteListedSites = JSON.parse(res.whiteList);
    }
let whiteList=browser.storage.local.get(“白名单”);
白名单。然后((res)=>{
//检查是否有任何被列入黑名单的网站
如果(!res.whiteList | | res.whiteList.left<1){
白名单网站=[];
//将黑名单站点解析为对象
}否则{
whiteListedSites=JSON.parse(res.whiteList);
}

谢谢你的帮助!:)

最好的解决方案是使用存储API,并在每次需要时调用它。带有文件的解决方案是目前为止最糟糕的。从文件读取是一个非常缓慢的操作,不建议这样做。另一方面,如果将列表存储在变量中,则只能从声明该变量的脚本访问该变量。存储API它并不慢,因此您可以每次调用它,而不会出现任何性能问题。此外,如果您每次需要列表时都调用API,您将确保始终更新数据。我还创建了一个Chrome扩展,每当需要读取数据时,我都会调用API

此外,在Chrome扩展中,最好使用Chrome扩展API中的Chrome.storage API,它是Chrome扩展API的一部分,与localStorageAPI相比有许多优点。它更快、异步,您可以从内容脚本访问它,而不仅仅是从后台脚本访问它,以及更多(有关详细信息,请参见此处())


谢谢你的回答,但我不确定我是否正确解释了自己。现在,我像这样使用存储,但有多个函数一次又一次使用同一代码。所以我想知道是否应该创建一个函数,从存储中获取数据并使用回调返回。然后调用此函数来删除代码重复。希望您理解我:)“一个函数,它将从存储中获取数据并使用回调返回。然后调用此函数以删除代码重复”你的意思是什么?请更准确地回答你的问题。@Koleslav1)一直读取存储有什么问题?这样,即使扩展在另一个选项卡中更改了当前数据,也会始终保留当前数据。2)不需要JSON.parse和JSON.stringify-存储支持数组和对象。因为这是我的第一个扩展,所以我我只是好奇我的方法是否正确。也感谢你的建议,非常感谢。我的问题与在几个函数中重复相同的代码有关,因此我认为最好的解决方案是为此创建一个函数。请参阅如何使用async/await语法,然后您可以简单地执行此操作:whiteListedSites=await browser.storage.local.get({whiteList:[]});对于chrome.storage API,您不需要异步/等待。最好使用它
chrome.storage.local.get(['key'], function(result) {
  console.log('Value currently is ' + result.key);
});