javascript - chrome.storage.sync.get 与外部对象同步,但内部对象不同步?

标签 javascript google-chrome asynchronous sync

我正在尝试使用 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/

相关文章:

javascript - 使管道的转换方法中的返回语句通用

java - 为什么 mathGPA 不能正常工作?

javascript - Chrome 扩展 "Refused to load the script because it violates the following Content Security Policy directive"

javascript - 水平滚动到另一个元素内的元素

c# - 如何在计时器中使用异步和等待

javascript - 为什么 JavaScript 中返回调试器会失败?

javascript - 如何正确转义 JSON.stringify 中的引号?

javascript - 谷歌浏览器扩展程序 : Cannot launch Print dialog

javascript - 如何使用 mysql 对函数进行请求

javascript - 从异步服务器端数据调用渲染 ReactJS