这更像是一个美学问题,而不是一个实际问题。 Google建议的代码运行正常。但是,我觉得写作不太舒服。
撰写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点击事件),您最终可能会使用错误的键变量值。
如果您可以随时从结果中检索密钥,那就没问题了。像这样:
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的对象,而是返回一个根本没有属性的对象(因此无法获取属性的名称)。这使您无法在函数中检索最初查询的密钥。
我认为这不是问题,因为它无论如何都有效。我只是不喜欢写这样的东西。或者我认为这是奇怪的代码我错了吗?或者也许有办法更恰当地做到这一点?
答案 0 :(得分:2)
嗯,你有一个很奇怪的问题。 StorageArea.get接受键或键数组作为第一个参数。所以你可以像这样写代码:
var keys = ["cake", "pie", "squirrel"];
chrome.storage.sync.get(keys,function(result){
keys.forEach(function(key){
alert(result[key]);
})
});