chrome.storage.sync.get 与外部对象同步,但内部对象不同步?
chrome.storage.sync.get sync with outer level object, but inner object is not sync?
我正在尝试使用 chrome.storage.sync.get
取回设置。我不明白的是,当我调用 console.log(settings)
时,它 returns 是正确的值。但是如果我调用 console.log(settings.speeds)
,它会 returns 旧值。我认为这与 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
我正在尝试使用 chrome.storage.sync.get
取回设置。我不明白的是,当我调用 console.log(settings)
时,它 returns 是正确的值。但是如果我调用 console.log(settings.speeds)
,它会 returns 旧值。我认为这与 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