gpt4 book ai didi

javascript - 函数回调、局部变量和 chrome.storage.sync.get

转载 作者:行者123 更新时间:2023-12-02 18:16:53 24 4
gpt4 key购买 nike

这更多的是一个美学问题,而不是一个实际问题。谷歌建议的代码工作正常。不过,我写起来不太舒服。

当您编写 Google Chrome 扩展程序时,您可以使用永久存储。它是使用某个函数检索的,如下所示:

chrome.storage.sync.get("cake", function(result) {
alert(result["cake"]);
});

这没关系。现在,如果您想从存储中迭代大量值,可以像这样:

var keys = new Array("cake", "pie", "squirrel");
$.each(keys, function() {
var key = $('<div>').append(this).html(); // ignore this line
chrome.storage.sync.get(key, function(result) {
alert(result[key]);
});
});

这效果非常好。但我无法动摇这样的想法:从技术上讲,您正在使用回调函数,该函数使用外部函数的局部变量,该变量正在通过迭代进行更改。我假设回调在完成迭代周期后不可能发生,但在其他情况下(例如 jQuery 单击事件),您最终可能会使用键变量的错误值。

如果您可以随时从结果中检索 key ,那就太好了。像这样:

var keys = new Array("cake", "pie", "squirrel");
$.each(keys, function() {
var key = $('<div>').append(this).html(); // ignore this line

chrome.storage.sync.get(key, function(result) {
var key;
for (key in result) {}

alert(result[key]);
});
});

但是,如果它在存储中找不到现有值,则无法执行此操作。它不会返回一个属性设置为 null 的对象,而是返回一个根本没有属性的对象(因此您无法获取属性的名称)。这使您无法在函数中检索最初查询的键。

我想这不是问题,因为无论如何它都能工作。我只是不喜欢写这样的东西。或者我认为这是奇怪的代码是错误的吗?或者也许有一种方法可以更正确地做到这一点?

最佳答案

嗯,你有一个很奇怪的问题。 StorageArea.get接受键或键数组作为第一个参数。所以你可以这样编写代码:

var keys = ["cake", "pie", "squirrel"];
chrome.storage.sync.get(keys,function(result){
keys.forEach(function(key){
alert(result[key]);
})
});

关于javascript - 函数回调、局部变量和 chrome.storage.sync.get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com