所以我有一些代码,我通过他们的API获取登录用户的Facebook ID。看起来像这样:
var facebookId = "";
facebookId = getFBIdSafe();
获取它的方法调用如下所示:
function getFBIdSafe()
{
FB.api('/me', function(response) {
if (!response || response.error) {
return "";
} else {
return response.id;
}
});
}
正在发生的事情是,我按照上面的说明调用了这个方法,然后去做其他的事情,其中一个是对我自己的服务器的AJAX调用,传递了{set}的facebookId
。问题是,它从未设置过。
我不想在代码中放置FB.api
个调用,这样我就可以将其他代码放入成功回调中。我怎样才能干净利落地处理这个问题,并确保在我打电话给自己的服务器之前这个ID总是回来?
P.S。它不会执行此代码,除非用户首先登录到Facebook - 该检查是基于网站上的状态标记进行的 - 所以这不是同一个问题。
答案 0 :(得分:1)
如果你想要的是避免检索当前用户的FB Id,那么你应该延迟所有服务器调用,直到获得id。如果你有jQuery或者愿意使用jQuery,你可以使用$.Deferred()推迟所有服务器调用,直到检索到FB Id。我建议做一些事情:
var FBIdLoad = $.Deferred();
function getFBIdSafe()
{
FB.api('/me', function(response) {
if (!response || response.error) {
FBIdLoad.resolveWith("");
} else {
FBIdLoad.resolveWith(response.id);
}
});
}
[...]
FBIdLoad.done(function(FBId){
/* Your server call with the Id */
}
如果对象已经解析(当FB.Api以id响应时),则会自动执行传递给FBIdLoad.done的所有函数,并始终收到请求的Id。
希望它有所帮助,