Angularjs UI路由器解析中的$q承诺?

Angularjs UI路由器解析中的$q承诺?,angularjs,angular-promise,deferred,Angularjs,Angular Promise,Deferred,实际上,这个问题可以简化为“返回一个$http或Restangular调用,结果是一个承诺”。我的目标是在$http调用完成后解析promise对象: var deferredCall= $q.defer(); 然后通过调用解决此问题: $http.get (url) .then(function(result){ deferredCall.resolve('Success' + result);}, function(){ deferredCall.resolve('Failu

实际上,这个问题可以简化为“返回一个$http或Restangular调用,结果是一个承诺”。我的目标是在$http调用完成后解析promise对象:

var deferredCall= $q.defer();
然后通过调用解决此问题:

$http.get (url)
   .then(function(result){ deferredCall.resolve('Success' + result);},
    function(){ deferredCall.resolve('Failure' + error););
然后我有一个promise对象,它将在调用完成时得到解决(成功或失败),这就是我想要的:

deferredCall.promise.then(function (value) {
    return //something to pass to controller;
});
目标是实例化控制器,无论解析成功还是失败。我的问题?决心只能接受承诺,所以:`delferredcall.promise。我如何通过使用resolve/through a service通过上述通话解决此承诺?服务方法的结果是承诺吗


比如,如果我创建一个服务,其方法进行$http调用,然后返回deferredCall

这就是我们在项目中解析数据的方式:

角度$routeProvider:

$routeProvider
    .when('/something/something', {
        templateUrl: 'somewhere/some-details.html',
        controller : SomeController,
        resolve : {
            someItem : function (SomeService) {
                return SomeService.getSomethingAll();
            }
        }
    })
控制器:

var SomeController = function ($scope, someItem) {};
数据服务:

.service('SomeService', function (SomeUtils, $http) {
    return {
        getSomethingAll : function () {
            return SomeUtils.promiseHttpResult($http.get("api/something/all"));
        }
    }
})
Utils服务:

.service("SomeUtils", function($q) {
    return {
        promiseHttpResult: function (httpPromise) {
            var deferred = $q.defer();
            httpPromise.success(function (data) {
                deferred.resolve(data);
            }).error(function () {
                deferred.reject(arguments);
            });
            return deferred.promise;
        }
    }
})

又好又简单。无需技能:)(DD)

这是我们在项目中解析数据的方式:

角度$routeProvider:

$routeProvider
    .when('/something/something', {
        templateUrl: 'somewhere/some-details.html',
        controller : SomeController,
        resolve : {
            someItem : function (SomeService) {
                return SomeService.getSomethingAll();
            }
        }
    })
控制器:

var SomeController = function ($scope, someItem) {};
数据服务:

.service('SomeService', function (SomeUtils, $http) {
    return {
        getSomethingAll : function () {
            return SomeUtils.promiseHttpResult($http.get("api/something/all"));
        }
    }
})
Utils服务:

.service("SomeUtils", function($q) {
    return {
        promiseHttpResult: function (httpPromise) {
            var deferred = $q.defer();
            httpPromise.success(function (data) {
                deferred.resolve(data);
            }).error(function () {
                deferred.reject(arguments);
            });
            return deferred.promise;
        }
    }
})

又好又简单。无需技能:)(DD)

这是我们在项目中解析数据的方式:

角度$routeProvider:

$routeProvider
    .when('/something/something', {
        templateUrl: 'somewhere/some-details.html',
        controller : SomeController,
        resolve : {
            someItem : function (SomeService) {
                return SomeService.getSomethingAll();
            }
        }
    })
控制器:

var SomeController = function ($scope, someItem) {};
数据服务:

.service('SomeService', function (SomeUtils, $http) {
    return {
        getSomethingAll : function () {
            return SomeUtils.promiseHttpResult($http.get("api/something/all"));
        }
    }
})
Utils服务:

.service("SomeUtils", function($q) {
    return {
        promiseHttpResult: function (httpPromise) {
            var deferred = $q.defer();
            httpPromise.success(function (data) {
                deferred.resolve(data);
            }).error(function () {
                deferred.reject(arguments);
            });
            return deferred.promise;
        }
    }
})

又好又简单。无需技能:)(DD)

这是我们在项目中解析数据的方式:

角度$routeProvider:

$routeProvider
    .when('/something/something', {
        templateUrl: 'somewhere/some-details.html',
        controller : SomeController,
        resolve : {
            someItem : function (SomeService) {
                return SomeService.getSomethingAll();
            }
        }
    })
控制器:

var SomeController = function ($scope, someItem) {};
数据服务:

.service('SomeService', function (SomeUtils, $http) {
    return {
        getSomethingAll : function () {
            return SomeUtils.promiseHttpResult($http.get("api/something/all"));
        }
    }
})
Utils服务:

.service("SomeUtils", function($q) {
    return {
        promiseHttpResult: function (httpPromise) {
            var deferred = $q.defer();
            httpPromise.success(function (data) {
                deferred.resolve(data);
            }).error(function () {
                deferred.reject(arguments);
            });
            return deferred.promise;
        }
    }
})


又好又简单。不需要技能:)(DD)

为什么你需要$q来完成这个任务?我不知道在使用angularjs时还能怎么做。我并不是说“没有其他方法可以解决这个问题”——我只是不知道如何用javascript解决这个问题$q是我的猜测。我正在寻找任何能够实现最终目标的东西,即无论$http调用失败还是成功,都能返回其结果的承诺。调用确实需要嵌套在另一个承诺中,因为如果解析调用失败,控制器将不会实例化。@VSO您不需要创建另一个承诺。。只需返回
$http.get
promise..@VSO您不使用$q Restangular和$http都会给您承诺…@PankajParkar:这就是我现在正在做的,但在某些情况下,它解决了控制器抛出错误时仍然失败的问题。我可能还做错了什么。我现在来看看。谢谢。为什么你需要$q来做这个?我不知道在使用angularjs时怎么做。我并不是说“没有其他方法可以解决这个问题”——我只是不知道如何用javascript解决这个问题$q是我的猜测。我正在寻找任何能够实现最终目标的东西,即无论$http调用失败还是成功,都能返回其结果的承诺。调用确实需要嵌套在另一个承诺中,因为如果解析调用失败,控制器将不会实例化。@VSO您不需要创建另一个承诺。。只需返回
$http.get
promise..@VSO您不使用$q Restangular和$http都会给您承诺…@PankajParkar:这就是我现在正在做的,但在某些情况下,它解决了控制器抛出错误时仍然失败的问题。我可能还做错了什么。我现在来看看。谢谢。为什么你需要$q来做这个?我不知道在使用angularjs时怎么做。我并不是说“没有其他方法可以解决这个问题”——我只是不知道如何用javascript解决这个问题$q是我的猜测。我正在寻找任何能够实现最终目标的东西,即无论$http调用失败还是成功,都能返回其结果的承诺。调用确实需要嵌套在另一个承诺中,因为如果解析调用失败,控制器将不会实例化。@VSO您不需要创建另一个承诺。。只需返回
$http.get
promise..@VSO您不使用$q Restangular和$http都会给您承诺…@PankajParkar:这就是我现在正在做的,但在某些情况下,它解决了控制器抛出错误时仍然失败的问题。我可能还做错了什么。我现在来看看。谢谢。为什么你需要$q来做这个?我不知道在使用angularjs时怎么做。我并不是说“没有其他方法可以解决这个问题”——我只是不知道如何用javascript解决这个问题$q是我的猜测。我正在寻找任何能够实现最终目标的东西,即无论$http调用失败还是成功,都能返回其结果的承诺。调用确实需要嵌套在另一个承诺中,因为如果解析调用失败,控制器将不会实例化。@VSO您不需要创建另一个承诺。。只需返回
$http.get
promise..@VSO您不使用$q Restangular和$http都会给您承诺…@PankajParkar:这就是我现在正在做的,但在某些情况下,它解决了控制器抛出错误时仍然失败的问题。我可能还做错了什么。我现在来看看。谢谢,谢谢。这就是我需要的。你确定最后一个例子有效吗?在我的情况下,延迟。承诺只是立即接受,没有等待。即使我评论resolve&reject out,它也会通过Hanks。这就是我需要的。你确定最后一个例子有效吗?在我的情况下,延迟。承诺只是立即接受,没有等待。即使我评论resolve&reject out,它也会通过Hanks。这就是我需要的。你确定最后一个例子有效吗?在我的情况下,延迟。承诺只是立即接受,没有等待。即使我评论resolve&reject out,它也会通过Hanks。这就是我需要的。你确定最后一个例子有效吗?在我的情况下,延迟。承诺只是立即接受,没有等待。即使我评论了resolve&reject out,它也会通过