Javascript chrome.storage.sync.get与外部级别对象同步,但内部对象不同步?

Javascript chrome.storage.sync.get与外部级别对象同步,但内部对象不同步?,javascript,google-chrome,asynchronous,sync,Javascript,Google Chrome,Asynchronous,Sync,我正在尝试使用chrome.storage.sync.get恢复设置。我不明白的是,当我调用console.log(settings)时,它会返回正确的值。但是如果我调用console.log(settings.speeds),它将返回旧值。我认为这与chrome.storage.sync.get的异步特性有关。有人能解释一下这是怎么回事吗?如果有解决办法的话。我试着使用回调,但没用。我想一个解决方案是只使用一个级别,但这不是我想要的 谢谢大家的帮助 var settings = { s

我正在尝试使用
chrome.storage.sync.get
恢复设置。我不明白的是,当我调用
console.log(settings)
时,它会返回正确的值。但是如果我调用
console.log(settings.speeds)
,它将返回旧值。我认为这与chrome.storage.sync.get的异步特性有关。有人能解释一下这是怎么回事吗?如果有解决办法的话。我试着使用
回调
,但没用。我想一个解决方案是只使用一个级别,但这不是我想要的

谢谢大家的帮助

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