2015-10-17 53 views
-4

我有一個奇怪的問題,我注意到內容腳本只使用chrome.storage.local.get檢索值,當我使用alert來顯示它們(它們必須先以某種方式先調用以顯示)不勝感激。奇怪的鉻存儲錯誤

var ref; 
var max; 
var min; 
var disc; 

chrome.storage.local.get([ 
     'ref', 
     'max', 
     'min', 
     'disc' 
    ], function(data){ 
     ref = parseFloat(data.ref); 

     max = parseFloat(data.max); 

     min = parseFloat(data.min); 

     disc = parseFloat(data.disc); 

     console.log('Values Gotten'); 
}); 

function main() { 
    setTimeout(function(){refresh()},ref*1000); 
} 

function refresh(){ 
    window.location = "-----some webpage------[its filled in actual code]"; 
} 
+0

向我們展示您有問題的代碼。 –

+0

添加到主帖 – Yer

+0

你在哪裏叫'alert'? –

回答

1

chrome.storage.local.get調用是異步的,這意味着該函數立即返回,並且回調被以後調用。

如果您在chrome.storage.local.get之後調用main,ref仍然未定義,因爲指派此變量的回調仍未執行。

爲了防止在ref變量被賦值時需要調用main
要做到這一點,你需要在回調中調用main

var ref; 
var max; 
var min; 
var disc; 

chrome.storage.local.get([ 
     'ref', 
     'max', 
     'min', 
     'disc' 
    ], function(data) { 
     ref = parseFloat(data.ref); 
     max = parseFloat(data.max); 
     min = parseFloat(data.min); 
     disc = parseFloat(data.disc); 

     console.log('Values Gotten'); 

     main(); 
}); 

function main() { 
    setTimeout(function(){refresh()},ref*1000); 
} 

function refresh() { 
    window.location = "-----some webpage------[its filled in actual code]"; 
}