繁体   English   中英

从函数的回调中返回变量

[英]returning a variable from the callback of a function

我正在使用以下功能:

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;
    }

现在,问题是我从check_perm的结果中获得了一个undefined的信息,而在Firebug控制台中,我可以看到response的值为0或1(取决于perm)

有人知道我在做什么错吗? 我猜测这与我试图捕获回调中变量的值有关。

关于Nikhil Gupta。

我假设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
    });
}

看起来您正在异步调用FB.api ,将其传递给一个匿名函数作为给result提供值的回调。 执行回调之前check_perm返回,此时result仍不确定。

问题1:结果可由回调读取,但它是一个副本,因此您无法按照自己的方式写。 (可以在本地而非全局范围内编写,可以通过将其设置为全局变量来“解决”此子问题,但仍然无法使您的代码正常工作)

问题2:FB.api最有可能在将来异步调用,以使check_perm立即返回,并导致其当前处于任何状态(未定义)

您需要将处理实际响应的代码放在该回调函数中,以便在响应可用时执行该回调函数。 此时,您甚至不需要结果变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM