我正在尝试使用 chrome.storage.sync.get
取回设置。我不明白的是,当我调用 console.log(settings)
时,它会返回正确的值。但如果我调用 console.log(settings.speeds)
,它会返回旧值。我认为这与 chrome.storage.sync.get
的异步性质有关。有人可以解释一下这里发生了什么吗?如果有解决方案。我尝试使用 callback
但它没有帮助。我想一种解决方案是只使用一个级别,但这不是我想要的。
感谢大家的帮助。
var settings = {
speeds: {
speedInput1: 1.0, // after get, new value should be 11.23
speedInput2: 2.0 // after get, new value should be 4.50
},
shortcuts: {
shortCut1: '1',
shortCut2: '2'
}
};
chrome.storage.sync.get(settings, function(result) {
// Retrieve speed settings
for (var key in settings.speeds) {
if (key in result.speeds) {
settings.speeds[key] = result.speeds[key];
}
};
// Retrieve shortcut settings
for (var key in settings.shortcuts) {
if (key in result.shortcuts) {
settings.shortcuts[key] = result.shortcuts[key]
}
};
});
console.log(settings); // correct updated values
console.log(settings.speeds); // old values
最佳答案
我为任何感兴趣的人找到了解决方法。我用一个函数包装了 get 调用并调用该函数并解决了问题。至于为什么这能解决问题……我不知道。下面是一个例子。
function getChromeStorage() {
chrome.storage.sync.get(settings, function(storage) {
// get stored values back;
}
getChromeStorage(); // calling it as a function solves the asynchronous issue
关于javascript - chrome.storage.sync.get 与外部对象同步,但内部对象不同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812786/