JavaScript:等待每个异步调用完成

时间:2014-10-14 09:11:22

标签: javascript underscore.js promise angular-promise

我正在尝试从多个源加载数据,并希望仅在加载所有数据后继续处理。这是我的代码:

var tables = [];
$http
    .get('/tables')
    .then(function (response) {
        _.each(response.data, function (table) {
            tables.push(table);
        });
    })
    // get detail data
    .then(function () {
        _.each(tables, function (table) {
            $http.get('/tables/' + table)
                .success(function (data) {
                    process(data);
                });
        });
    })
    .then(function () {
        // after everything loaded
        // run this function
    });

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您应该使用以下内容:

.then(function () {
    return $q.all(_.map(tables, function (table) {
        return $http.get('/tables/' + table)
        .success(process);
    });
})

与问题的主要部分无关,但请注意,如果您要将参数传递给.success,则无需为process()定义全新的匿名函数。

另请参阅:$q promise with Underscore _each