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

我建议你做的是使用回调(可能是匿名的),因为函数fbAsyncInitgetLoginStatus函数都是异步的(这意味着它们不会立即返回某些东西 - 他们必须先调用 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

这是一个范围和同步问题。第二次定义“flag”时,它只在 fbAsyncInit 函数内部可见,与外部的“flag”变量没有连接。此外,fbAsyncInit 函数中的代码将在稍后调用,此时外部的“标志”已经返回。

于 2012-11-13T09:53:09.073 回答