Javascript 我需要在上一个函数完成后调用一个函数

Javascript 我需要在上一个函数完成后调用一个函数,javascript,angularjs,Javascript,Angularjs,我使用angularJs,我在控制器中使用这个函数从数据库中获取数据 this.callServer = function callServer(criteria) { ctrl.searchParameters = criteria; ctrl.isLoading = true; var start = $scope.itemsPerPage * ($scope.currentPage - 1); var limit = $scope.itemsPerPage;

我使用angularJs,我在控制器中使用这个函数从数据库中获取数据

this.callServer = function callServer(criteria) {
    ctrl.searchParameters = criteria;
    ctrl.isLoading = true;
    var start = $scope.itemsPerPage * ($scope.currentPage - 1);
    var limit = $scope.itemsPerPage;
    service.getRandomsItems(criteria, start, limit).then(
        function(result) {
            var remainder = $scope.totalItems % $scope.itemsPerPage
            if (remainder > 0)
                $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage) + 1;
            else
                $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage);

            ctrl.displayed = result.randomsItems;
            $scope.totalItems = result.total;
            ctrl.isLoading = false;
        });
    };
}
我也在控制器中调用这个函数来处理分页问题

$scope.pageChanged = function(currentPage) {
    $scope.currentPage = currentPage;
    ctrl.callServer($scope.criteria);
}
如您所见,my函数callServer返回ctrl.displayed,这是当前页面中显示的行

现在我想使用新页面,所以我调用了ctrl.callServer来获取新页面,然后调用了ctrl.selectCurrentPage(),就像这样

$scope.pageChanged = function(currentPage) {
    $scope.currentPage = currentPage;
    ctrl.callServer($scope.criteria);
    ctrl.selectCurrentPage() // I want this function to be called when ctrl.callServer($scope.criteria) is finished
}
在哪里

在简单英语中,我希望在ctrl.callServer为finsih时调用ctrl.selectCurrentPage并获取新数据 但这不会发生。

将其作为回调传递

this.callServer = function callServer(criteria, callback) {
                            ctrl.searchParameters = criteria;
                            ctrl.isLoading = true;
                            var start = $scope.itemsPerPage * ($scope.currentPage - 1);
                            var limit = $scope.itemsPerPage;
                            service.getRandomsItems(criteria, start, limit).then(
                                            function(result) {
                                                var remainder = $scope.totalItems % $scope.itemsPerPage
                                                if (remainder > 0)
                                                    $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage) + 1;
                                                else
                                                    $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage);
                                                ctrl.displayed = result.randomsItems;
                                                $scope.totalItems = result.total;
                                                ctrl.isLoading = false;
                                                callback();
                                            });
                        };

                    } ]);



$scope.pageChanged = function(currentPage) {

                    $scope.currentPage = currentPage;
                    ctrl.callServer($scope.criteria, ctrl.selectCurrentPage);
                }

只需从
callServer
返回一个承诺,并在
pageChanged
中使用它即可

第一步:

this.callServer = function callServer(criteria) {
    ctrl.searchParameters = criteria;
    ctrl.isLoading = true;
    var start = $scope.itemsPerPage * ($scope.currentPage - 1);
    var limit = $scope.itemsPerPage;

    return service.getRandomsItems(criteria, start, limit).then(function(result) {
        var remainder = $scope.totalItems % $scope.itemsPerPage
        if (remainder > 0)
            $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage) + 1;
        else
            $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage);

        ctrl.displayed = result.randomsItems;
        $scope.totalItems = result.total;
        ctrl.isLoading = false;
    });
};
然后:

尽量避开地狱。请阅读一些有用的信息

this.callServer = function callServer(criteria) {
    ctrl.searchParameters = criteria;
    ctrl.isLoading = true;
    var start = $scope.itemsPerPage * ($scope.currentPage - 1);
    var limit = $scope.itemsPerPage;

    return service.getRandomsItems(criteria, start, limit).then(function(result) {
        var remainder = $scope.totalItems % $scope.itemsPerPage
        if (remainder > 0)
            $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage) + 1;
        else
            $scope.numPages = parseInt($scope.totalItems / $scope.itemsPerPage);

        ctrl.displayed = result.randomsItems;
        $scope.totalItems = result.total;
        ctrl.isLoading = false;
    });
};
$scope.pageChanged = function(currentPage) {
    $scope.currentPage = currentPage;
    ctrl.callServer($scope.criteria).then(function () {
        ctrl.selectCurrentPage();
    });
}