我正在尝试使用此函数将sortedScores设置为一个值...每当我在任何地方执行console.log时,它似乎都正确地存储了值,但它实际上无法正确设置sortedScores ...
function facebook(sortedfriends) {
var myID;
var access_token;
FB.init({
appId : something,
status : true,
cookie : true,
xfbml : true,
});
FB.getLoginStatus(function(response, sortedfriends) {
if(!response.session) {
FB.login(function(response) {
myId = response.session.uid;
access_token = response.session.access_token;
//does stuff
if (!response.session) {
console.log('User cancelled login or did not fully authorize.');
}
});
}
else if(response.session) {
myId = response.session.uid;
access_token = response.session.access_token;
var D = new Array();
this.access_token = access_token;
FB.api('/me/feed?access_token=' + access_token + '&limit=100', function(response, sortedfriends) {
for( i=0; i<response.data.length; i++) {
var msg = response.data[i];
D.push(msg);
}
sortedfriends = somefunction(D, myID);
//i know somefunction works because if i do console.log(sortedfriends) it shows me the right values...
});
}
});
}
当我尝试 var朋友; Facebook的(朋友); 朋友们是不确定的......停下来?
答案 0 :(得分:2)
目前尚不清楚您在哪里尝试访问已排序的朋友,但我猜您的问题是Facebook登录是异步的,因此响应在facebook
函数完成后的某个时间到来。因此,如果您在调用facebook
函数后立即尝试使用sortedfriends数据,则数据将不会存在,因为登录调用尚未完成。
使用sortedfriends
数据的唯一方法是从成功处理程序到登录调用(您的console.log已经验证数据是否存在)。如果要在其他代码中使用它,则将其他代码从成功处理程序调用到登录调用。调用facebook
函数后,您无法立即调用该代码。
由于登录调用的异步性质,此逻辑无效(当facebook
调用返回并且在执行后继续执行时,它尚未完成:
var sortedfriends = [];
facebook(sortedfriends);
// use sortedfriends here
相反,你必须做这种类型的结构:
var sortedfriends = [];
facebook(sortedfriends);
// nothing executes here
并且,在你的facebook调用中你有这个,添加一个函数调用你想要使用sortfriends数据的代码:
else if(response.session) {
myId = response.session.uid;
access_token = response.session.access_token;
var D = new Array();
this.access_token = access_token;
FB.api('/me/feed?access_token=' + access_token + '&limit=100', function(response, sortedfriends) {
for( i=0; i<response.data.length; i++) {
var msg = response.data[i];
D.push(msg);
}
sortedfriends = somefunction(D, myID);
//i know somefunction works because if i do console.log(sortedfriends) it shows me the right values...
// call the rest of your code here that will use sortedfriends
doSomethingWithSortedFriends(sortedfriends);
});
答案 1 :(得分:0)
javascript函数不会更改传入的引用。您无法传递undefined
并期望在函数执行后它将被定义。
相反,您应该将sortedFriends
设为全局变量,而不是将其作为函数参数传递。请注意,执行sortedFriends
内的ajax查询后将设置getLoginStatus
的值,因此在执行facebook
函数后,您将无法立即使用它。 / p>