如果我在Chrome控制台中运行showFriends()函数,我可以看到数据。但是在代码中,我在$ .each函数之后调用showFriends() - 它失败了,因为它似乎是异步运行。
我已尝试链接.promise()。done(showFriends();在$ .each函数之后但也失败了。
有什么想法吗?
var myApp = {};
myApp.fbFriends = [];
function showFriends() {
console.log(myApp.fbFriends);
}
function getFriends() {
FB.api('/me/friends?fields=birthday', function(response) {
var friendsBirthdays = response.data;
friendsIdArray = friendsBirthdays.map(function(user) { return user.id });
createFriendsArray(friendsIdArray);
});
function createFriendsArray(friendsIdArray) {
$.each(friendsIdArray, function(index, value) {
FB.api(value.toString(), function(response) {
myApp.fbFriends.push(response);
});
});
showFriends();
}
}
答案 0 :(得分:1)
如果没有别的,你可以在每次推送后比较friendIdArray和myApp.fbFriends的长度,如果它们相同且大于零,则运行showFriends()
。这将确保在最后一次迭代后显示朋友。
这样的事情:
$.each(friendsIdArray, function(index, value) {
FB.api(value.toString(), function(response) {
myApp.fbFriends.push(response);
if (myApp.fbFriends.length == friendsIdArray.length)
showFriends();
});
});