函数中的$ http.get方法

时间:2015-12-17 19:38:06

标签: javascript angularjs

我有一个函数和几个$ http获取请求。我需要在执行每个$ http请求后调用另一个函数。但它总是在请求完成之前执行该功能。是什么原因?有办法解决吗?

$scope.json=function(){
        $scope.loading = true;
        $http.get(DataElementUrl).then(function (response) {
            if (!response.data == "")
            dataElementJson = response.data;

        });
        $http.get(categoryComboUrl).then(function (response) {
                if (!response.data == "")
                    categoryComboJson = response.data;                   
        });
        $http.get(categoryUrl).then(function (response) {
                    if (!response.data == "")
                       categoryJson = response.data;                        
        });
        check++;
        $scope.getJson();
};

3 个答案:

答案 0 :(得分:9)

您可以使用$ q'所有':

    var a = $http.get(DataElementUrl).then(function (response) {
        if (!response.data == "")
        dataElementJson = response.data;

    });
    var b = $http.get(categoryComboUrl).then(function (response) {
            if (!response.data == "")
                categoryComboJson = response.data;                   
    });
    var c = $http.get(categoryUrl).then(function (response) {
                if (!response.data == "")
                   categoryJson = response.data;                        
    });

    $q.all([a, b,c]).then(function(result) {
      check++;
      $scope.getJson();
    });

答案 1 :(得分:4)

这种情况正在发生,因为javascript中的网络调用是异步的。你应该做什么看看角度提供的q服务。这是一个承诺库。

如果你想在所有3个完成时调用一个方法,你需要使用的是

.all([promise1, promise2], fulfilled, rejected)

当满足数组中的所有promise时,它将调用已完成的回调。

答案 2 :(得分:2)

我会像这样使用$ q.all():

$scope.json=function(){
    $scope.loading = true;

    var promises = [$http.get(DataElementUrl),
                    $http.get(categoryComboUrl),
                    $http.get(categoryUrl)]

    $q.all(promises).then(function(results){
          dataElementJson = results[0].data,
          categoryComboJson = results[1].data,
          categoryJson = results[2].data
    });
};