$ .each完成后调用函数

时间:2014-02-22 04:29:03

标签: javascript

如果我在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();
  }
}

1 个答案:

答案 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();
  });
});