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

时间:2016-02-12 16:03:53

标签: javascript facebook facebook-graph-api facebook-javascript-sdk

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

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

此代码适用于Chrome,但在Firefox 数组 userPictures 为空。

1 个答案:

答案 0 :(得分:1)

您可以使用&#34;递归函数&#34;来解决这类问题,或者 - 更好 - 只需使用一个API调用:

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

我会将递归函数计算到编程的基础知识,但是你应该熟悉它们。例如:Calling a javascript function recursively