JavaScript API Facebook не определен - PullRequest
0 голосов
/ 16 ноября 2011

Это довольно общая проблема, с которой я столкнулся здесь, поэтому я решил спросить, надеюсь, кто-нибудь может мне помочь.

У меня есть гибкое приложение, использующее для входа Facebook js bridge, и я пытаюсь передать имя пользователя обратно в приложение, но я сталкиваюсь с тем, что я объясню после кода:

function getFriends() {
            var nameOfPlayer = "";
            FB.api('/me', function(response) {
                nameOfPlayer = response.name;
                });
            return nameOfPlayer;
        }

Если у меня есть имя приложения Flex для печати nameOfPlayer, оно возвращает неопределенное значение, как если бы я делал предупреждение с nameOfPlayer, но если я сделаю предупреждение внутри вызова FB.api для nameOfPlayer, то оно появится с моим именем , но это все равно не вернет имя. Я попытался заставить его вернуть общую строку, и это работает, поэтому он передает информацию, а не сохраняет ее в переменную. Есть идеи как это исправить? Это, вероятно, очень запутанно, поэтому, если мне нужно что-то уточнить, дайте мне знать. Заранее спасибо за любую помощь, которую вы можете оказать мне:)

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

Вы должны делать это на основе событий. Ниже приведен некоторый псевдокод.

var yourFacebookAPIClass = new yourFacebookAPIClass();
yourFacebookAPIClass.addEventListener(Event.UserCallComplete, function(ev){
    var nameOfPlayer = SomeParser.ParseData(ev);
    someFunctionThatUsesYourVar(nameOfPlayer);
});
yourFacebookAPIClass.getNameOfPlayer();

В вашем классе API Facebook:

function getNameOfPlayer(){
    makeTheApiCallHere();
}
0 голосов
/ 16 ноября 2011

Функция, которую вы определяете внутри вызова FB.api, на самом деле является функцией обратного вызова, что означает, что она вызывается асинхронно. Таким образом, строка кода после вызова API (оператор return) будет выполняться сразу, не дожидаясь, пока Facebook вернет ответ. Функция обратного вызова, с другой стороны, будет ожидать ответа Facebook, фактически для этого она и предназначена. Вы бы лучше выполняли всю свою логику, которая зависит от nameOfPlayer внутри этой функции обратного вызова.

Если вам определенно нужно вернуть переменную nameOfPlayer так, как она написана, вам нужно будет указать вашему коду ждать определения nameOfPlayer:

function getFriends() {
            var nameOfPlayer = "";
            FB.api('/me', function(response) {
                nameOfPlayer = response.name;
                });
            while(typeof nameOfPlayer === "undefined" || nameOfPlayer == "") {}
            return nameOfPlayer;
        }

Но я действительно не рекомендовал бы это, потому что ваше приложение зависнет, пока оно ожидает ответа. Вам лучше делать все внутри функции обратного вызова, а не возвращать что-либо.

Удачи! :)

...