在我的案例中如何解决我的承诺电话

时间:2015-03-20 16:21:31

标签: javascript angularjs angular-promise

我试图在我的服务中减少我的承诺对象。我有类似

的东西
angular.module('myApp').service('testService', ['Employees','$q',
    function(Employees, $q) {
        var service = {};
        var firstEmp;

        var deferred = $q.defer();

        Employees.query({
            Id: 123
            }, function(objects) {
                firstEmp = objects[0];
                deferred.resolve(objects);
        })


        service.getFirstEmployee = function() {
             var deferredtwo = $q.defer();

            // return deferredtwo.promise;
            //How to solve the double promise defer in my case
            //First promise is wait for the whole employees
            //this one is to return first employee
            deferred.promise.then(function(){
                deferredtwo.resolve(firstEmp);
            })
            return deferredtwo.promise;
        }

        return service;
]);

控制器

testService.getFirstEmployee.then(function(firstEmployee){
    console.log(firstEmployee) <---show first employee
})

我不确定如何解决双重承诺对象。谁能帮我?非常感谢!

2 个答案:

答案 0 :(得分:1)

澄清之后我想这就是你想要的:

angular.module('myApp').service('testService', ['Employees','$q',
    function(Employees, $q) {
        var service = {};
        var deferred = $q.defer();

        Employees.query({Id: 123}, function(objects) {
            firstEmp = objects[0];
            deferred.resolve(objects);
        });

        service.getFirstEmployee = function() {
            return deferred.promise.then(function(employees){
                return employees[0];
            });
        }

        return service;
]);

答案 1 :(得分:1)

如果你的最终目标只是为了获得第一名员工,那么你就不需要所有这些&#34;双重承诺&#34;什么东西。只需与第一位员工解决一个承诺:

angular.module('myApp').service('testService', ['Employees','$q',
    function(Employees, $q) {

        var pFirstEmployee = $q(function (resolve) {
            Employees.query({ Id: 123 }, function(objects) {
                resolve(objects[0]);
            });
        });

        return {
            getFirstEmployee: function() {
                return pFirstEmployee;
            }
        };
    }
]);

如果你想要两个方法 - 一个返回从查询返回的所有员工的承诺,另一个只返回该组中的第一个方法,只需为所有员工创建一个承诺并链接:

angular.module('myApp').service('testService', ['Employees','$q',
    function(Employees, $q) {

        var pAllEmployees = $q(function (resolve) {
            Employees.query({ Id: 123 }, resolve);
        }),
            pFirstEmployee = pAllEmployees.then(function (employees) {
            return employees[0];
        });

        return {
            getAllEmployees: function() {
                return pAllEmployees;
            },
            getFirstEmployee: function() {
                return pFirstEmployee;
            }
        };
    }
]);