让Angular-JS在继续之前等待异步调用有问题

Trouble getting Angular-JS to wait for async call before proceeding

本文关键字:等待 异步 调用 有问题 Angular-JS 继续      更新时间:2023-09-26

所以我知道你需要在Angular中使用承诺来管理异步,但我不太确定如何在这个实例中做到这一点。

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;
}

我认为是什么让我离开这里是我用来建立我的查询的数据是在一个数组。所以我不需要从一个请求中获取返回。会有几个。我需要做什么?举例会有帮助。谢谢。

$http返回一个承诺。问美元。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
});

乌利希期刊指南:
如果你需要从你的函数中返回,你可以

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
});