2013-10-05 34 views
0

我真的不明白回調函數,這可能是我得到的問題的來源: 我有一個getCookies()函數,它的工作,但現在我移動它在background.js中,函數外部的變量仍然未定義。Chrome擴展程序/ Javascript:變量仍然undefined

只要看看:

function getCookies(domain, name, callback) { 
    chrome.cookies.get({"url": domain, "name": name}, function(cookie) { 
     if(callback) { 
      callback(cookie ? cookie.value : null); 
     } 
    }); 
} 

var upw; //Passwort HASH 


//USER PW Hash auslesen 
    getCookies("http://example.org/", "upw", function(id) { 

    if(id == null) { 
     upw= null; 
     } 
    else { upw = id;} 
    console.log("Func: "+upw); 
}); 

console.log("Outside: "+upw); 

控制檯會給我這樣的:

Outside: undefined 
Func: 1234asdfqwertz5678 

所以該函數將被exectued 「爲時已晚」。我不知道爲什麼,我不知道,如何解決這個問題!

+0

由於getCookies是異步的,任何依賴'upw'的東西都必須在回調函數中完成,而不是在頂層。這就像使用AJAX。 – Barmar

+0

@Barmar:可以設置getCookies同步嗎? – wernersbacher

+0

可以做同步AJAX,我認爲它會同步設置cookie。不過,我不知道'chrome.cookies.get'是否提供了這樣的機制。 – Barmar

回答

0

回調函數是異步的,所以它不能工作!我正在處理回調函數中的所有內容。