2016-02-10 111 views
0

FB.api響應,這是我的代碼:無法獲得與JS類

function User() { 
    var self = this; 

    FB.api(someurl, function (response) { 

     self.id = response.id; 

    }); 
} 

我不能得到的ID會是這樣的:

var user = new User(); 
console.log(user.id); 

回答

0

嘗試

FB.api(someurl, function(response) { 
    console.log(response); 
}); 

並在此發佈響應值。

+0

一切都很好與響應。 {name:「some name」,email:「[email protected]」,id:123456789} –

+0

so try: function User(){ var self = this; self.id = 123456; } var user = new User(); console.log(user.id); 你會得到什麼? –

+0

123456.問題是獲取FB.api –

1

FB.api是一個帶回調的異步函數。在您閱讀user.id時,回調函數尚未被調用。

也許你應該移動異步初始化出構造,增加一個明確的「初始化」功能:

function User() { 
    var self = this; 

    this.init = function(onCompletion) { 
     FB.api(someurl, function (response) { 
      self.id = response.id; 
      if (onCompletion) onCompletion(); 
     }); 
    } 
} 

var user = new User(); 
user.init(function(){ 
    console.log(user.id); 
}); 
+0

好吧,那我該怎麼做?我只想存儲response.id和response.email,以便在不調用FB.login的情況下多次使用它們。 –

+0

將它們存儲以備後用是很好的;您只需確保在加載之前不要訪問這些緩存的值。如果您儘快需要它們,請使用init回調。 –

+0

是的。非常感謝。 –

0

嘗試定義,你初始化對象的模式,然後在異步請求使用回調。事情是這樣的:

function User() { 
    var self = this; 
    self.init = function(cb) { 
     FB.api(someurl, function (response) { 

      self.id = response.id; 
      if (cb) { 
       cb(); 
      } 
     }); 
    } 
} 

然後

var user = new User(); 
user.init(function() { console.log(user.id); });