我有这个工厂
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服务。
我需要在返回数据之前完成所有这些调用....
任何线索??
答案 0 :(得分:0)
问题是你正在管理一连串的承诺,所以你需要管理这些承诺的履行以允许流程继续,但在你的情况下你只等待第一个承诺,然后你启动一些其他请求和永远不要等他们回电。
有几种方法可以实现您的目标,但有人已经编写了一个您可以使用的库,并在其代码中查看了如何操作。