0

我正在尝试将我的朋友列表(姓名、图片和性别)存储在 var 上,但它无法正常工作。请准备好代码中的注释以获取详细信息。有任何想法吗?谢谢。

function getFriendsArray() {    
    var friendsArray = [];
        FB.api('/me/friends?fields=name,picture,gender', function(response) {
      if(response.data) {
        var data = '';
        $.each(response.data, function(indice, item) {
            alert(item.name); // Friend's name are displayed correctly
            friendsArray.push(item); // I believe this doesn't work
        });                       
      }
      else {
          errorHandler('getFriendsArray', JSON.stringify(response));
      }
    });

alert(friendsArray.length); // Returns 0 (incorrect)

return friendsArray.sort(sortByName);   
}
4

2 回答 2

0

调用function(response)是异步的。您应该在之后插入警报$.each

为了完整性:您应该改变解决问题的方法:不要调用返回数组但调用第二个函数的函数。

function getFriendsArray(callback, errorHandler) {    
    var friendsArray = [];
        FB.api('/me/friends?fields=name,picture,gender', function(response) {
      if(response.data) {
        var data = '';
        $.each(response.data, function(indice, item) {
            alert(item.name); // Friend's name are displayed correctly
            friendsArray.push(item); // I believe this doesn't work
        });
        callback(friendsArray);                       
      }
      else {
          errorHandler('getFriendsArray', JSON.stringify(response));
      }
    });
}

getFriendsArray(function(friends) {
    alert(friends);
},
function(error) {
    alert('error');
});
于 2012-10-17T12:22:52.273 回答
0

看起来 FB.api 发出了一个异步请求(如 jQuery.ajax),因此您alert(friendsArray.length)在 FB.api 调用完成并将结果推送到朋友数组之前执行。

于 2012-10-17T12:23:36.750 回答