2011-06-30 19 views
0

我使用defer的.done等待在函數完成之前加載cookie。當我嘗試運行代碼時,它完成並返回undefined。在第一個代碼可以完成之前,似乎.done正在發射。jquery推遲不等待之前調用.done

function getCookie(cookieName){ 
    var value; 
    var defer = new jQuery.Deferred(); 
    fetchCookie().done(
     function(){ 
      return value; 
     } 
    ); 
    function fetchCookie(){ 
     chrome.cookies.get(
      { 
      'url':'https://addictedtogether.com/', 
      'name':cookieName 
      }, 
      function(data){ 
       console.log(data); 
       value=data.value; 
      } 
     ); 
     return defer.promise(); 
    } 
} 

//usage 
var username=getCookie('username'); 

回答

2

延遲對象不會讓您避免回調。你仍然需要做這樣的事情(假設一切正確實施):

getCookie('username').then(function(username){ 
    console.log(username); 
}); 

它只會產生不必要的開銷。我寧願簡單地做:

function getCookie(cookieName, callback){ 
    chrome.cookies.get(
     { 
      'url':'https://addictedtogether.com/', 
      'name':cookieName 
     }, 
     function(data){ 
      console.log(data); 
      value=data.value; 
      if(callback) { 
       callback(value); 
      } 
     } 
    ); 
} 

//usage 
getCookie('username', function(username){ 
    console.log(username); 
}); 
+0

該方法工作正常,但我最好想getCookie()函數返回cookie的值,就像我在我的代碼中所述。有沒有一種聰明的方法來強制一個函數等待返回一個值。我知道我可以使用setInterval(),但它似乎過於笨重。謝謝! – devnill

+1

@devnill我不知道除了使用定時器的任何方法。 – serg

相關問題