Javascript 使函数返回包含对象的数组
我的头在各个角落都被这个击中了,但我这里遗漏了一些东西 信息 我正在编写一个小的javascript页面,它将为一张Facebook照片拍摄一个照片ID,然后返回总人数和共享人数,然后在每张照片上找到喜欢的人的数量,并将其附在一起 基本上,这是一个“计算共享喜欢” 到目前为止,我设法查询了共享的总数,并找到了其中的like,但没有安排的意义,因为获取共享的FB.API函数与获取like的FB.API函数是不同的请求 目标 我一直在尝试的是获取共享图像ID(我使用它来获取总喜欢)、人名、人名ID,并将它们作为对象推送到数组中 然后我将循环数组并附加喜欢的数量,同时检查并确保喜欢属于正确的个人ID 因此,我的最终数据数组如下所示:Javascript 使函数返回包含对象的数组,javascript,arrays,facebook,facebook-graph-api,object,Javascript,Arrays,Facebook,Facebook Graph Api,Object,我的头在各个角落都被这个击中了,但我这里遗漏了一些东西 信息 我正在编写一个小的javascript页面,它将为一张Facebook照片拍摄一个照片ID,然后返回总人数和共享人数,然后在每张照片上找到喜欢的人的数量,并将其附在一起 基本上,这是一个“计算共享喜欢” 到目前为止,我设法查询了共享的总数,并找到了其中的like,但没有安排的意义,因为获取共享的FB.API函数与获取like的FB.API函数是不同的请求 目标 我一直在尝试的是获取共享图像ID(我使用它来获取总喜欢)、人名、人名ID,
[{"id" : "pageID_PostID", "name" : "Some Name", "idmin" : "This is the person ID", "likes" : "This is the total number of likes"}, {etc}, {etc}]
问题
1-console.log-ing我将对象推到函数外部的数组,该函数将其设置为空数组,即使我全局定义了数组。当console.log-ing在函数内部时,它会按预期返回
我之所以不能将getLikes函数与finding shares函数一起使用,是因为它要么是未定义的,要么是不匹配的,我认为这是因为它是一个不同的FB.api调用,查询和获取结果需要几毫秒的时间,JS通过它来决定它的未定义
3-由于目标是将其全部格式化为HTML格式,因此我需要将结果安排为一个好的格式,以便我在不使用它的情况下使用。哪个是数组[对象,对象,对象]
代码
var pageAccessToken;
var shares = new Array();
function getShares(id){
FB.api('https://graph.facebook.com/' + id +'/sharedposts?access_token='+pageAccessToken, function(response)
{
for(var i = 0; i < response.data.length; i++)
{
if(response.data[i].story.indexOf('shared')){
var shareID = response.data[i].id;
var pageID = response.data[i].from.id;
var shareObj = new Object();
console.log(response.data[i].story);
console.log(" With Post ID " + shareID);
shareObj.id = response.data[i].id;
shareObj.name = response.data[i].from.name;
shareObj.idmin = response.data[i].from.id;
shareObj.likes = null;
shares.push(shareObj);
} //end if
} //end for loop
console.log(response.data.length + " People shared this photo.");
console.log("Inside call for shares array" + JSON.stringify(shares));
return shares; //I don't really get how return works cause its not helping anywhere!
}); //end fb api
} //end getShares
//function to retrieve likes
function getLikes(pageID, idmin){
FB.api('https://graph.facebook.com/' + pageID + '/likes? summary=1&access_token='+pageAccessToken, function(response)
{
for (var i = 0; i < shares.length - 1; i++) {
shares[i].likes = response.summary['total_count'];
console.log(shares[i].name + " has " + shares[i].likes + " likes.");
console.log(response.summary['total_count']);
}
});
}
//end getLikes
for (var i = 0; i < shares.length - 1; i++) {
getLikes(shares[i].id, shares[i].idmin);
}
getShares(insert a photo ID here);
console.log("2 Outside call for shares array" + JSON.stringify(shares));
var-pageAccessToken;
var shares=新数组();
函数getShares(id){
FB.api('https://graph.facebook.com/“+id+”/sharedposts?访问令牌=”+pageAccessToken,函数(响应)
{
对于(var i=0;i
由于FB.api函数是异步的,需要一些时间来响应,因此您也应该对函数采用异步方法。您可以在getShared
函数中接收一个函数作为参数,而不是返回shares
变量,并在准备就绪时将其称为passingshares
作为参数。下面是一个简单的例子:
function getShares(id, callback) {
FB.api('https://graph.facebook.com/' + id +'/sharedposts?access_token='+pageAccessToken, function(response) {
// ...do something with the response and store the result in a variable called shares...
callback(shares); // calls the function passed as argument passing "shares" as parameter
}
}
然后,您可以调用getShares
将函数作为参数传递,并对结果执行以下操作:
getShares(some_id, function(shares) {
alert('shares: ' + JSON.stringify(shares));
}
API是异步的,因此在回调之外记录数组内容不会显示任何内容。这是否回答了您的问题?谢谢,它现在工作得更好了,需要进一步扩展我对回调函数和异步函数的理解!