2013-11-04 36 views
0

我想知道如果我有這樣的的JavaScript單與承諾

var A = require("js/A"); 
var singleton = { 
    obj : null, 

    current: function() { 
      if(!this.obj){ 
      this.fetch(); 
      } 
      return this.obj; 
    }, 
    fetch: function() { 
      A.fetch().then(function(result){ 
      this.obj = result; 
      }); 
    } 
} 

一個單例對象,因此它等待取的時候回來我們return this.obj什麼時候?

回答

1

簡短的回答是否定的。抓取是異步發生的,因此在執行回調函數A.fetch()之前,外部函數將返回。

這是異步編程的本質,你需要熟悉的承諾和/或jQuery's deferred object(這是一個部分實施Promises/A規範的)來處理這種情況。

這裏是一個很好的介紹Promises,並here's another

+0

所以它只是返回「空」當我們調用當前? – peter

+0

執行「回調函數傳遞到'fetch'調用後,無論是」null「還是分配給它的值。 – Jason

+0

所以這意味着用戶將會看到null,並且只要從服務器返回,它將暗中成爲新值,即使該函數已經返回? – peter