繁体   English   中英

如何从函数内部获取(facebook)变量

[英]How to get (facebook)variable from inside the function

我想要在函数之外的另一个变量中的response.id。 仅此而已,但我似乎无法使其正常工作。 我尝试了至少12种其他方式。 总是“未定义”。

但是,当我取消注释该函数内的警报时,我确实可以在弹出警报中看到response.id。

var a;  

function GetMyId() {  
    FB.api("/me",  
        function (response) {  
            a = response.id;  
            //return alert(response.id);  
            return;  
    });  
}  

a = GetMyId();  
alert(a);

被限制为将连续性放在回调函数中是您必须使用Javascript才能执行异步代码所要付出的代价。 在您的示例中,您可以让原始函数继续执行其他请求,并在事件循环有空闲时间后立即在FB响应后正确调用回调。

关于回调的最大注意点是,不幸的是,您必须以continuation-passing-style重写代码。 这意味着您的(异步)函数(如FB函数) 从不返回值,而是在它们具有“返回”值时接收回调以进行调用

function getMyId(callback){
    //instead of returning an id, pass it to a
    //continuation function when we finally get it

    PB.api("/me", function(response){
        callback(response.id);
    });
}

function main(){
    getMyId(function(id){
        console.log("I can get my id", id)
    });
}

这基本上等同于您可能更习惯的以下非cps代码(但在这种情况下不能使用)

function main(){
    var id = getMyId();
    console.log("i can get my id", id);
}

理论上的好奇心:函数参数也是变量。 实际上,您永远不能通过滥用函数参数intead来使用var语句:)

var a = 17;
console.log('a is', a);

 (function(a){
    console.log('a is', a);
 }(17));

暂无
暂无

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

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