所以我知道你需要在Angular中使用promises来管理异步,但是我不太确定如何在这个实例中做到这一点。
function getLineGraphData(promises){
var points = [];
for (var i = 0; i < promises.length; i++) {
$http.get('/file/tsDataPoints/'+promises[i].unit+"?startDate="+promises[i].startTs+"&endDate="+promises[i].endTs+"&startState="+promises[i].startState+"&endState="+promises[i].endState).success(function(data){
points.push(data);
console.log(data);
});
}
console.log(points);
return points;
}
我认为在这里抛弃我的是我用于构建查询的数据是在一个数组中。所以我不需要从一个请求中获得回报。会有好几个。我需要做什么?例子会有所帮助。感谢。
答案 0 :(得分:3)
$ http返回一个承诺。当所有这些都被解析时,$ q.all会接受一系列承诺和解析。所以有可能:
promises = promises.map(function(promise){
return $http.get('/file/tsDataPoints/'+promise.unit+"?startDate="+promise.startTs+"&endDate="+promise.endTs+"&startState="+promise.startState+"&endState="+promise.endState);
});
$q.all(promises).then(function(resultsArray){
console.log(resultsArray); // array of results of all your $http's
});
<强> UPD:强>
如果你需要从你的函数中返回,你可以
function getLineGraphData(promises){
promises = promises.map(function(promise){
return $http.get('/file/tsDataPoints/'+promise.unit+"?startDate="+promise.startTs+"&endDate="+promise.endTs+"&startState="+promise.startState+"&endState="+promise.endState);
});
return $q.all(promises);
}
并称之为
getLineGraphData(promisesArr).then(function(resultsArray){
// do your stuff
});