Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将阵列保存到本地存储_Javascript_Arrays_Async Await_Local Storage_Firefox Addon Webextensions - Fatal编程技术网

Javascript 将阵列保存到本地存储

Javascript 将阵列保存到本地存储,javascript,arrays,async-await,local-storage,firefox-addon-webextensions,Javascript,Arrays,Async Await,Local Storage,Firefox Addon Webextensions,我不熟悉WebExtensions和JavaScript。我正在尝试编写一个带有pageAction按钮的小扩展,该按钮在单击时只需将当前URL保存到本地存储(即一些非常简单的“收藏夹”功能)。然而,我在使用chrome.storage.local.set()和.get()时遇到了问题。我一直在研究中的代码,并尝试将其重新用于我的目的,但失败得很惨。这是我目前的情况 saveURL()函数应该将数组加载到本地存储中,用新的URL更新它,然后将它保存回本地存储(目前,我只是有一个无用的字符串,我正

我不熟悉WebExtensions和JavaScript。我正在尝试编写一个带有
pageAction
按钮的小扩展,该按钮在单击时只需将当前URL保存到本地存储(即一些非常简单的“收藏夹”功能)。然而,我在使用chrome.storage.local.set()和
.get()时遇到了问题。我一直在研究中的代码,并尝试将其重新用于我的目的,但失败得很惨。这是我目前的情况

saveURL()
函数应该将数组加载到本地存储中,用新的URL更新它,然后将它保存回本地存储(目前,我只是有一个无用的字符串,我正试图推送到该数组)

异步函数saveURL(){
log(“保存调用的URL”);
var url=等待加载url();
日志(URL);
推送(“a-new-url”)
日志(URL);
chrome.storage.local.set({'pearsurls':url});
URL=等待加载URL();
日志(URL);
返回true;
}
loadURLs()
函数用于从本地存储中检索内容。我正在使用
storage.local.get()
中的默认值来初始化第一次使用的数组

函数loadURLs(){
var pearsurls=[]
log(“加载所有保存的URL”);
chrome.storage.local.get({pearsurls:[]},函数(结果){
pearsurls=结果。pearsurls;
console.log(pearsurls)
});
console.log(pearsurls)
返回pearsurls;
}
控制台中的输出为我提供:

保存页面Save.js:52:3
保存调用的URL。save.js:5:3
加载所有保存的URL save.js:38:3
数组[]save.js:43:3
数组[]save.js:7:3
数组[“a-new-url”]save.js:9:3
加载所有保存的URL save.js:38:3
数组[]save.js:43:3
数组[]

也就是说,我的
loadURLs()
函数似乎什么都没做。。。我做错了什么?

您的函数
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
首先返回为空,并在代码执行后随时使用回调
函数(result)填充该数组。

谢谢你的解释,但是不,这似乎解决不了问题。现在,我的saveURL()函数不再向控制台打印任何内容。它是否在第一次或第二次调用loadURLs时冻结?已经是第一次了。现在我唯一输出到控制台的是“保存URL…”和“加载保存的URL”注释随时被调用?我所看到的是,这个代码片段现在带有承诺,应该可以根据chrome文档工作。您可以检查lastError是否已更改。虽然鼓励对问题进行修改以提供更多信息,但不允许对问题进行修改,使已发布的答案无效。一致的意见是,任何具有权限的用户都应该恢复此类编辑。我将在发布此评论后不久这样做。请注意,这并不妨碍您在发布任何答案之前完全更改问题。你应该在新的问题上发表一篇文章。你可以找到你最近更改的来源。我希望这有助于在你的新一期上发表一篇文章。链接到这个问题为你的新问题提供背景也会很有好处,但是新问题也应该是独立的。请理解,单个问题不是交互式调试会话。如果你在得到答案后有新的问题,你应该发布一个新的问题。还要注意的是,把一个问题作为一个重复的问题关闭并没有什么错。副本用作路标,允许正在搜索答案的其他人在副本目标上找到答案。下次,请包含一份完整的副本,以复制问题。对于Chrome扩展或Firefox WebExtensions,这几乎总是意味着包括manifest.json和一些背景、内容和/或弹出脚本/HTML。寻求调试帮助的问题(“为什么这段代码没有按我想要的方式工作?”)必须包括:(1)所需的行为,(2)特定的问题或错误,(3)在问题本身中重现它所需的最短代码。另请参阅:、和。对于Firefox WebExtensions,如果您不将函数分解为单独的代码块,这将非常有用。请将您正在显示的包含在单个文件中的所有代码放在一个代码块中,该代码块明确指定了该文件(例如,普通文本说my background.js:[然后是一个代码块]。问题/问题可能在很大程度上取决于代码所在的文件。将代码放在每个文件的单个代码块中可以更容易地确定发生了什么。