Angular JS:按顺序调用Async工厂方法

时间:2016-11-08 16:12:03

标签: angularjs asynchronous angular factory

我是棱角分明的新手,我正在创建一个简单的搜索应用。在我的搜索应用程序中,我正在使用工厂,我有两个功能(搜索和人口统计调用两个不同的webapi来检索数据如下。

MYSearchApp.factory('dataProvider', function($http, $q,$timeout) {



    return {

        search: function (filter) {
            var dataUrl = '/api/xyz/search';
            var deferred = $q.defer();
            $http.post(dataUrl, filter)
                .success(function (data) {
                deferred.resolve(data);
                })
                .error(function (err,status) {
                    if (status == -1) {
                        err = "Server not responding";
                    }
                    deferred.reject(err);
                });

            return deferred.promise;
        },

        Demographics: function (filter) {
            var dataUrl = '/api/xyz/Demographics';
            var deferred = $q.defer();
            $http.post(dataUrl, filter)
                .success(function (data) {

                    deferred.resolve(data);
                })
                .error(function (err,status) {
                    if (status == -1) {
                        err = "Server not responding";
                    }
                    deferred.reject(err);
                });

            return deferred.promise;
        }



    }
});

我在我的代码中调用函数如下:

MYSearchApp.controller('SearchController',
    function SearchController($scope, $route, $routeParams, dataProvider, consts, $timeout) {

.................
..............


$scope.search = function (searchForm) {


dataProvider.Demographics(filter).then(function(data)   {
                    if (data && data.length > 0) {

                        $scope.Email = data[0].Email;
                    }
                }

                )

dataProvider.search(filter).then(function (data) {

                    if (data && data.length > 0) {

            $scope.Details = data;

        })

        }

}

截至目前这两个函数同时运行,但是我想知道我如何顺序运行这个函数,即我想先执行人口统计信息,然后在收到结果后我想执行搜索方法。

如果有人可以分享一些如何实现这一目标的例子,那就太棒了。 在此先感谢您的帮助。

0 个答案:

没有答案