Javascript 如何在循环中收集Facebook API请求的响应?

Javascript 如何在循环中收集Facebook API请求的响应?,javascript,facebook,facebook-graph-api,facebook-javascript-sdk,Javascript,Facebook,Facebook Graph Api,Facebook Javascript Sdk,我试图收集在循环中调用的FBAPI异步请求的结果。我使用下一个代码: function getPicturesByUserIds(friendsIdList) { var userPictures = []; for (var i = 0; i < friendsIdList.length; i++) { (function () { var userId = friendsIdList[i];

我试图收集在循环中调用的FBAPI异步请求的结果。我使用下一个代码:

    function getPicturesByUserIds(friendsIdList) {
        var userPictures = [];
        for (var i = 0; i < friendsIdList.length; i++) {
            (function () {
                var userId = friendsIdList[i];
                var j = i;
                var friendsIdListLength = friendsIdList.length - 1;
                FB.api('/'+userId+'/picture?type=large', function (responce) {
                    if (responce && !responce.error) {
                        userPictures[userId] = responce.data.url;
                    }
                    if (j >= friendsIdListLength) {
                        console.log(userPictures);
                        sendPicturesAndGetResponse(userPictures);
                    }
                });
            })();
        }
    }
函数getPicturesByUserId(friendsIdList){
var userPictures=[];
for(var i=0;i=friendsIdListLength){
console.log(用户图片);
SendPictures和GetResponse(用户图片);
}
});
})();
}
}

这段代码可以在Chrome中使用,但在Firefox array中,userPictures是空的。

您可以使用“递归函数”解决这类问题,或者-更好-只需使用一个API调用即可:

/me/friends?fields=name,picture.type(large)

不过,我会将递归函数计算为编程的基础,您应该熟悉这些函数。例如:

userPictures
应该是一个对象(因为您正在使用userID键入),或者应该使用索引
i
。除此之外,您的循环不断重置
userID
,因此所有回调都取消引用相同的值-实际上,您希望通过
(函数(id){…}(id))
调用传递userID或迭代器。您必须避免这种情况是的,这是最简单的方法。(谢谢)