向数组中的每个用户添加共同好友数
Adding mutual friend count to each user in an array
我有一个Facebook用户数组(userList),我想将数组中每个用户的共同好友数量存储为一个属性(mfCount)。我已经检查过,如果我输入一个单独的用户,我是否得到了正确数量的共同好友,但我不确定为什么我不能将这个值添加到数组中的每个用户?
function getfriends() {
FB.api('/me/friends', function(response) {
userList = userList.concat(response.data);
userCount = response.data.length;
for( i=0; i<response.data.length; i++) {
userId = response.data[i].id;
FB.api('/me/mutualfriends/'+userId+'/', function(response) {
userList[i].mfCount = response.data.length;
userCount--;
if(userCount === 0) { display_results();}
});
}
});
}
看看下面的实现。我把它分解成了多个函数来分隔每一步。当你处理循环和回调时,跟踪匿名函数的定义范围变得非常重要
理论上,你可以像在写
……但随着嵌套回调的深入,它会变得非常、非常令人困惑。
一种解决方案是使每个函数中的每个变量都是100%全局的,这样只有i
需要有一个封闭的引用。不过,这不是很好看。
仔细查看每个函数,并注意每个步骤调用的函数中要包含哪些参数(或回调的闭包)。它们都是需要的(无论你是以这种方式将它们分开,还是通过一个内衬中的封闭物或其他什么)。
以下内容对我来说很好,在Facebook开发者沙箱中(第一次使用API)
这些日志有利于我了解数据是如何产生的,并保持基本的堆栈跟踪。
var userList = [],
userCount = 0;
function getfriends () {
//console.log("getFriends");
var url = "/me/friends";
FB.api(url, function (response) {
if (response.error && response.error.message) { return false; }
userList = userList.concat(response.data);
userCount = response.data.length;
compareAllFriends();
});
}
function compareAllFriends () {
//console.log("compareAllFriends");
var i = 0, l = userCount, userID;
for (; i < l; i += 1) {
userID = userList[i].id;
compareFriendsWith (i, userID);
}
}
function compareFriendsWith (i, id) {
//console.log("compareFriendsWith", i, id);
var path = "/me/mutualfriends/",
url = path + id + "/";
FB.api(url, (function (i) {
return function (response) {
//console.log(i, response);
var numFriends = (response.data) ? response.data.length : 0;
setMutualFriends(i, numFriends);
userCount -= 1;
//console.log(userCount);
if (userCount === 0) {
display_results();
//console.log("DISPLAYING");
}
};
}(i)));
}
function setMutualFriends (i, friendcount) { userList[i].mfCount = friendcount; }
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 添加好友 Ajax,然后更改为好友请求
- 向数组中的每个用户添加共同好友数
- 将 Facebook 好友添加到网站 [图形 API 2.5]
- Facebook喜欢聊天,有添加或删除好友的选项
- 在PhoneGap应用中使用JS添加一个Facebook好友
- 点击javascript按钮添加好友
- 使用Ajax添加好友-Django
- Facebook API-获取好友并按日期排序成为好友(已添加/已接受)
- 使用 Facebook JavaScript SDK 将人员添加到好友列表