Javascript 如何在循环中收集Facebook API请求的响应?
我试图收集在循环中调用的FBAPI异步请求的结果。我使用下一个代码: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];
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或迭代器。您必须避免这种情况是的,这是最简单的方法。(谢谢)