Angularjs 如何在angular js中延迟循环包装的$http get请求?

Angularjs 如何在angular js中延迟循环包装的$http get请求?,angularjs,promise,http-get,deferred,Angularjs,Promise,Http Get,Deferred,我有一个功能,检查记录,如果它们存在,它会为每个项目下载它们。这是一个在循环中发生的函数,因此可以有许多记录。我认为我正确地使用了$Q来解除每个$http请求的限制,以便一个接一个地等待一个请求,这样它们就不会同时发生,但它们仍然同时发出 我见过$q;但我不明白如何在我的实现中使用它。将每次呼叫推迟到之前的一次呼叫完成后,如何正确编写 CheckRecords: function(obj) { var promise; var promises = []; if (ob

我有一个功能,检查记录,如果它们存在,它会为每个项目下载它们。这是一个在循环中发生的函数,因此可以有许多记录。我认为我正确地使用了$Q来解除每个$http请求的限制,以便一个接一个地等待一个请求,这样它们就不会同时发生,但它们仍然同时发出

我见过$q;但我不明白如何在我的实现中使用它。将每次呼叫推迟到之前的一次呼叫完成后,如何正确编写

CheckRecords: function(obj) {
    var promise;
    var promises = [];

    if (obj.BD.img == 'checkedRecord') {
        var objBDUrl = 'services/GetSurveyBD/?id=' + obj.BD.ID;
        promise = $timeout(function(){
                $http.get(objBDUrl, { cache: true }).then(function(response) {
                    obj.BD.ID = obj.BD.ID;
                    obj.BD.data = response.data;
                });
            }, 250);
        promises.push(promise);
    }
    if (obj.MR.img == 'checkedRecord') {

        var objMRUrl = 'services/GetMR/?id=' + obj.MR.ID;
        promise = $timeout(function(){
            $http.get(objMRUrl, { cache: true }).then(function(response) {
                obj.MR.ID = obj.MR.ID;
                obj.MR.data = response.data;
            });
        }, 250);
        promises.push(promise);
    }
    $q.all(promises).then(function(){
        return obj;
    });
}
函数$q.all只是确保所有请求都已完成,请求仍会立即执行,但其结果会延迟。如果要控制执行顺序,请在结果函数中执行请求。

$q -模块ng中的服务 一种服务,可帮助您异步运行函数,并在完成处理时使用其返回值或异常