Angular:然后在http调用完成之前执行

时间:2018-04-17 19:55:36

标签: angularjs

当我调用addCategory时,它会假设添加我的新类别,然后调用_initAdminController()返回主页并刷新数据。但是正在发生的事情是initAdminController中的getcourselist和getsubjectlist以某种方式先运行,然后addCategory最后运行。你知道是什么原因造成的吗?我正确地使用了吗?

function _initAdminController() {
    $scope.pageIndex = "adminTab";
    console.log("reloading data");

    $http({
        method : 'GET',
        url : 'http://testserver.com:8082/getSubjectListService'
    }).then(function successCallback(response) {
        $scope.updatedSubjects = response.data;
    }, function errorCallback(response) {
        console.log(response.statusText);
    });

    $http({
        method : 'GET',
        url : 'http://testserver.hughes.com:8082/getCategoryListService'
    }).then(function successCallback(response) {
        $scope.categories = response.data;
    }, function errorCallback(response) {
        console.log(response.statusText);
    });
}

$scope.addCategory= function(){

    var name = $scope.addCategoryData.name;
    var desc = $scope.addCategoryData.description;

    $http({
        method : 'POST',
        url : 'http://testserver.com:8082/addCategoryService',
        withCredentials: true,
        cache: true,
        headers : { 'Content-Type': 'application/json' },
        data : {
            name: name,
            description: desc
        }
    }).then(_initAdminController(), function errorCallback(response) {
        console.log(response.statusText);
    });
}

当我使用then get http时,这种情况正常。 http get首先完成,然后我的范围变量得到更新。 最后,在我尝试以下代码之前,在这种情况下,successCallback根本没有运行。那么这意味着只适用于GET吗?

$http({
    method : 'POST',
    url : 'http://testserver.com:8082/addCategoryService',
    withCredentials: true,
    cache: true,
    headers : { 
        'Content-Type': 'application/json' 
    },
    data : {
        name: name,
        description: desc
    }
}).then(
    function successCallback(response) {
        _initAdminController()
    }, 
    function errorCallback(response) {
        console.log(response.statusText);
    }
);

1 个答案:

答案 0 :(得分:1)

代码:

}).then(_initAdminController(), ...);

应该是:

}).then(_initAdminController, ...);