javascript - 如何等待异步函数返回?

标签 javascript angularjs facebook asynchronous

我正在使用 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模拟等待该函数返回的服务;然而,这似乎是一种非常老套的技术。有什么方法可以在执行脚本的其余部分之前等待所有函数返回吗?

如果可能,请尝试建议代码示例。

最佳答案

您可能会看到下面的链接,我认为这与您的问题类似

Is there a possible way implementing Promise inside angular.foreach?

关于javascript - 如何等待异步函数返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805464/

相关文章:

java - 使用 AngularJS 为 java 项目构建 Web UI?

angularjs - Angular2 Http 设置 header Access-Control-Allow-Origin 和 http CORS

php - 使用 API 发布链接不包括图片、标题或元描述 PHP

Facebook 登录按钮(在本地主机上): The Login Button plugin no longer works on http pages

javascript - joomla添加改变图片的javascript

javascript - 如何在第一个选择框的基础上自动填充第二个选择框并在第二个选择框的基础上自动填充文本框

javascript - express POST req.body 解析器为空

ios - 处理 openURL : with Facebook and Google

javascript - 的含义::以 Angular 形式表示

javascript - Rails Turbolinks 破坏 pnotify