Angularjs angjuar-返回$http承诺而不是预期对象的服务

Angularjs angjuar-返回$http承诺而不是预期对象的服务,angularjs,Angularjs,我正在构建我的第一个AngularJS应用程序,并且被困在这个(应该是简单的)问题中 我有一个服务“vehicleService”,它完成所有$http功能。然后检查操作是否成功,然后生成一个包含状态代码的新对象,以及预期返回对象或错误列表;它能正确地执行 vehicleService.getVehicles = function() { return $http.get(url) .then(function(result

我正在构建我的第一个AngularJS应用程序,并且被困在这个(应该是简单的)问题中

我有一个服务“vehicleService”,它完成所有$http功能。然后检查操作是否成功,然后生成一个包含状态代码的新对象,以及预期返回对象或错误列表;它能正确地执行

vehicleService.getVehicles = function() {
               return  $http.get(url)
                    .then(function(result) {
                        $log.log('OKAY');
                        var returnObject = {};
                        returnObject.status = result.status;
                        returnObject.data = result.data;
                        $log.log(returnObject);
                        return returnObject;
                    })
                    .catch(function(result) {
                        $log.log('NOWAY');
                        var returnObject = {};
                        returnObject.status = result.status;
                        returnObject.errorList = result.data.modelState;
                        return returnObject;
                    });
我的问题是,当我试图将returnObject返回给控制器时,我得到的是$http PROMITE对象而不是returnObject

我猜这是因为行return$http.get(url),但它不应该先执行,然后执行,然后传递returnObject吗


编辑:忘记更改标题了,$http是一个异步函数,您可能需要

vehicleService.getVehicles = function(callback) { $http.get(url)
                .then(function(result) {
                    $log.log('OKAY');
                    var returnObject = {};
                    returnObject.status = result.status;
                    returnObject.data = result.data;
                    $log.log(returnObject);
                    callback(returnObject);
                })
                .catch(function(result) {
                    $log.log('NOWAY');
                    var returnObject = {};
                    returnObject.status = result.status;
                    returnObject.errorList = result.data.modelState;
                    callback(returnObject);
                });}

或者,您应该使用$scope.returnObject将函数中的代码替换为:

            $http({ method: 'GET', url: 'url' }).
                success(function (result) {
                    $log.log('OKAY');
                    var returnObject = {};
                    returnObject.status = result.status;
                    returnObject.data = result.data;
                    $log.log(returnObject);
                    return returnObject;
                }).
                error(function (result) {
                    $log.log('NOWAY');
                });

你是在回报承诺。更改后,第二行应为
$http.get(url)
。回调不需要返回,这意味着我不能使用
then
操作承诺,对吗?如果要在承诺解析函数内设置值,则必须从服务返回承诺,然后在控制器内使用。。。。使用$scope.returnObject=。。。。。。如果您查看
承诺API
,您将看到
。然后
。catch
是处理承诺的正确方法