这更像是一个美学问题,而不是一个实际问题。谷歌建议的代码工作正常。但是,我觉得写起来不太舒服。
当您编写 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 click 事件),您最终可能会使用错误的键变量值。
如果您可以随时从结果中检索密钥,那就很好了。像这样:
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 的对象,而是返回一个根本没有属性的对象(因此您无法获取属性的名称)。这使您无法在函数中检索最初查询的键。
我想这不是问题,因为它无论如何都有效。我只是不喜欢写这样的东西。还是我认为这是奇怪的代码是错误的?或者也许有一种方法可以更正确地做到这一点?