繁体   English   中英

Angular for循环$ http等到完成

[英]Angular for loop $http wait until finish

我有这个工厂

produccionApp.factory('eskuratudatuak', function ($http, $q){
    return {
        getNestedDataBetter: function (desde, hasta){
            return $q.all (
                $http.get('/planificacion/1/' + desde + '/' + hasta)
            )
            .then (function(results) {
                angular.forEach(results.data, function(eguna) {
                    console.log("xie!");
                        angular.forEach(eguna.linea1, function(turno) {
                                angular.forEach(turno.ordenes, function(orden) {
                                    var url = "http://someurl:5080/expertis/delaoferta?of="+ orden.ref;
                                    return $q.all($http.get(url))
                                    .then(function(datuak){
                                        console.log("not finish yet");
                                        for ( var k=0; k < datuak.length; k++ ) {
                                            if ( datuak[k].QPendiente < datuak[k].QNecesaria ) {
                                                orden.badutstock = 1;
                                            } else {
                                                orden.badutstock = 0;
                                            }

                                        }

                                    })

                                });
                        });
                });
                console.log("finish!");
                return results.data;
            });
        }
    };
});

输出为:

Here!
xie!
finish
XHR finished loading: GET ....
not finish yet
XHR finished loading: GET ....
not finish yet
XHR finished loading: GET ....
not finish yet
XHR finished loading: GET ....
not finish yet

但是正确的方法应该是

Here!
xie!
XHR finished loading: GET ....
    not finish yet
XHR finished loading: GET ....
    not finish yet
XHR finished loading: GET ....
    not finish yet
XHR finished loading: GET ....
    not finish yet
finish

我正在调用Web服务,并在完成时正在使用一些foreach循环构建数据变量,有时会调用另一个Web服务。

我需要完成所有这些调用,然后再返回数据。

任何线索?

问题是您正在管理一系列的诺言,因此您需要管理这些诺言的履行以使流程得以继续,但是在您的情况下,您仅等待第一个诺言,然后启动其他一些请求而从不等待他们回调。

有多种方法可以完成您要寻找的内容,但是已经有人编写了一个库供您使用,您可以在库中查看其代码以学习如何做。

在这里看看https://github.com/caolan/async

暂无
暂无

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

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