возвращать результаты запроса из вызова FB.api с пользовательской функцией - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть этот код:

getThirdPartyID : function () {                     
    return FB.api("/me?fields=third_party_id", function (userData) { 
        console.debug("Your Facebook ThirdPartyId is: " + userData["third_party_id"]);
        return userData["third_party_id"];
    });
},

Но он возвращается пустым.В чем проблема с этим кодом?Как я могу получить к нему доступ с той же идеей?Тпй

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

FB.api - это функция, которая делает асинхронный запрос к Facebook API и ничего не возвращает.Вы можете получить результаты только в пределах callback.Вы должны использовать другой подход для реализации этого:

var someObj = {
  getThirdPartyID : function (thirdPartyIDCallback) {
    return FB.api("/me?fields=third_party_id", function (userData) { 
      console.debug("Your Facebook ThirdPartyId is: " + userData["third_party_id"]);
      thirdPartyIDCallback(userData["third_party_id"]);
    });
  }
}

var handleThirdPartyID = function(thirdPartyID){
  // do something with thirdPartyID
  alert(thirdPartyID);
}
someObj.getThirdPartyID(handleThirdPartyID);
1 голос
/ 01 февраля 2012

FB.api работает асинхронно.Это означает, что ваша функция возвращается до того, как возвращается функция обратного вызова FB.api.

Вам следует установить возвращаемое значение FB.api для переменной или вызвать другую функцию внутри функции обратного вызова FB.api.

function GetUserData(val){
 alert(val);
}
getThirdPartyID : function () {                     
    FB.api("/me?fields=third_party_id", function (userData) { 
        console.debug("Your Facebook ThirdPartyId is: " + userData["third_party_id"]);
        GetUserData(userData["third_party_id"]);
    });


};
...