0

サンプルコードがあります:

function initFB() {
    var flag;
    window.fbAsyncInit = function() {
        FB.init({appId: 'zzzzzz', status: true, cookie: true, xfbml: true});

        var flag;
        FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {
                flag = 1;
            } else if (response.status === 'not_authorized') {
                flag = 2;
            } else {
                flag = 3;
            }
        });    
    };
    return flag;
}

var flag = initFB();
alert(flag); 

=> 結果はundefined, Facebook 関数でフラグを設定できませんか?, そうでない場合は、どうすれば修正できますか?

4

2 に答える 2

2

fbAsyncInit関数と関数は両方とも非同期であるため、コールバック(おそらく匿名)を使用することをお勧めします(getLoginStatusつまり、すぐに何かを返すことはありません-最初にFacebookを呼び出す必要があります。そうすることで、彼らは彼ら自身のコールバック(function() {部分)を呼び出します)。

function initFB(callback) {
    window.fbAsyncInit = function() {
        FB.init({appId: 'zzzzzz', status: true, cookie: true, xfbml: true});

        FB.getLoginStatus(function(response) {
            var flag;
            if (response.status === 'connected') {
                flag = 1;
            } else if (response.status === 'not_authorized') {
                flag = 2;
            } else {
                flag = 3;
            }
            callback(flag);
            /* This will call the anonymous function specified as 
               "callback" with a parameter of whatever is in the 
               "flag" variable. */
        });    
    };
}

/* Here we use an anonymous function as a callback of 
   when getLoginStatus has gotten it's return value */
initFB(function(flag) {
    alert(flag); 
});
于 2012-11-13T10:01:03.120 に答える
0

これはスコープと同期の問題です。2 回目に「フラグ」を定義すると、fbAsyncInit 関数の内部でのみ表示され、外部の「フラグ」変数への接続はありません。また、fbAsyncInit 関数のコードは、外側の「フラグ」が既に返されたときに後で呼び出されます。

于 2012-11-13T09:53:09.073 に答える