2015-06-12 77 views
4

我正在嘗試使用chrome.storage.sync.get來取回設置。我不明白的是,當我撥打console.log(settings)時,它會返回正確的值。但是,如果我撥打console.log(settings.speeds),它會返回舊值。我認爲這與chrome.storage.sync.get的異步本質有關。有人能解釋一下這裏發生了什麼嗎?如果有解決方案。我嘗試使用callback,但它沒有幫助。我想一個解決方案是隻使用一個級別,但這不是我想要的。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 

回答

1

我找到了一個解決辦法的人誰是有興趣的。我用函數封裝了get調用並調用該函數並解決了該問題。至於爲什麼這解決了這個問題......我不知道。下面是一個例子。

function getChromeStorage() { 
    chrome.storage.sync.get(settings, function(storage) { 
    // get stored values back; 
} 
getChromeStorage(); // calling it as a function solves the asynchronous issue