我正在使用AngularJS使用Facebook Graph API。它有一个名为FB.api();
的函数,它返回一个包含一些数据的响应对象。但是,这是一个异步功能。我想知道在继续使用脚本的其余部分之前如何等待此函数返回。
请考虑以下代码:
var data = [];
FB.api('/' + response.data[i].id + '/tags', 'GET', {}, function(response) {
for(var j = 0; j < response.data.length; j++) {
var friend = {
id: response.data[j].id,
name: response.data[j].name
};
FB.api('/' + response.data[j].id + '/picture?width=200&height=200', 'GET', function(response) {
friend.url = response.data.url;
});
$timeout(function() {
data.push(friend);
}, 3000);
}
});
我正在尝试构建一个返回对象列表的函数。我遍历数据并保存对象中需要的数据。在循环内部,我正在再次调用异步API函数来获取一些额外的数据。但是,此函数不会立即返回,因此数据response.data.url
永远不会保存在friend
对象中。
我使用Angular的&timeout
服务来模拟等待此函数返回;然而,这似乎是一种非常黑客的技术。有没有什么办法可以在执行其余脚本之前等待所有函数返回?
如果可能,请尝试建议代码示例。
答案 0 :(得分:1)
您可能会看到以下链接,我认为这与您的问题类似
Is there a possible way implementing Promise inside angular.foreach?
答案 1 :(得分:0)
你应该使用async.each()而不是for()因为for()不要在这里等待callback():https://www.npmjs.com/package/async#each