繁体   English   中英

等待循环结束,facebook API?

[英]Wait for loop to finish, facebook API?

有没有办法改善我推物体的方式?

我的问题是console.log(facebookPlayers)为空,但是使用setTimeout它显示了新的对象数组。 显然是因为它是在对象数组填充之前被调用的。

我计划使用此对象数组构建主干集合,这是我从facebook API构建对象数组的最初想法。 也许有更好的方法,或者这可行,但是如果这样做,我需要找出一种方法来等待对象完全填充。

var facebookPlayers = [];

FB.api('/554870764588961/members/', function (response) {
    for (i = 0; i < response.data.length; i++) { 
        FB.api(response.data[i].id+'/picture', function (response) {
            facebookPlayers.push({key:response.data.url});
        });
    }
});

console.log(facebookPlayers)

为每个成员再次调用API并不是一个好主意。 这非常慢,您可能会达到API限制。 您应该考虑使用嵌套查询

function getPlayers(callback) {
    var facebookPlayers = [];

    FB.api('/554870764588961?fields=members{id,name,picture}', function (response) {
        for (var i = 0, count = response.data.length; i < count; i++) { 
            facebookPlayers.push({key:response.data[i].picture.data.url});
        }
        callback(facebookPlayers);
    });
}

getPlayers(function (response) {
    console.log(response);
});

未经测试,但API调用可在API Explorer中使用,因此应该没有问题。

编辑:我还修复了“ i”的范围,并使循环速度更快。

console.log()在调用返回之前运行...将其放入回调中将使您能够看到正在添加的内容。 如下 ...

var facebookPlayers = [];

FB.api('/554870764588961/members/', function (response) {
    for (i = 0; i < response.data.length; i++) { 
        FB.api(response.data[i].id+'/picture', function (response) {
            facebookPlayers.push({key:response.data.url});
            console.log(facebookPlayers)
        });
    }
});

facebook方法是异步的。 利用回调或Promise。 切勿使用超时来假设何时准备就绪。

回调示例:

function doFacebookStuff(complete){
    var facebookPlayers = [];
    FB.api('/554870764588961/members/', function (response) {
        for (i = 0; i < response.data.length; i++) { 
            FB.api(response.data[i].id+'/picture', function (response) {
                facebookPlayers.push({key:response.data.url});
                if(i === response.data.length-1)
                    complete(facebookPlayers); 
                    // callback when all calls are done
            });
        }
    });
}

doFacebookStuff(function(facebookPlayers){
    console.log(facebookPlayers);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM