从函数的回调中返回一个变量

时间:2010-12-25 22:29:08

标签: javascript jquery

我正在使用以下功能:

function loop_perms(permissions) {
.... call check_perm here....
}
function check_perm(perm) {
        var result;
        FB.api(
         {
            method: 'users.hasAppPermission',
            ext_perm: perm
         }, function(response) {
            result = response;
         });
         return result;
    }

现在,问题是我从undefined的结果中得到check_perm,而在Firebug控制台中,我可以看到response的值为0或1(取决于烫发)

任何人都知道我做错了什么?我猜这与我试图在回调中捕获变量值的事实有关。

此致 尼基尔古普塔。

3 个答案:

答案 0 :(得分:4)

我认为Facebook API是异步的。因此,在执行return result时,尚未调用回调。您必须从调用函数提供回调:

function check_perm(perm, callback) {
    var result;
    FB.api(
     {
        method: 'users.hasAppPermission',
        ext_perm: perm
     }, callback);
}

function loop_perms(permissions) {
    check_perm(whatever here, function(result) {
        // do something with result
    });
}

答案 1 :(得分:0)

看起来你正在异步调用FB.api,将一个匿名函数作为回调传递给result一个值。 check_perm在执行回调之前返回,此时result仍未定义。

答案 2 :(得分:0)

问题1:回调结果是可读的,但它是一个副本,所以你想的方式不可写。 (本地可写不是全局的,这个子问题可以通过使它成为一个全局变量来“修复”,但它仍然不会使你的代码工作)

问题2:FB.api很可能在将来异步调用回调,让check_perm立即返回结果,无论当前状态如何(未定义)

当响应可用时,您需要将处理实际响应的代码放在该回调函数中。你甚至不需要那个结果变量。