[英]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.