Angularjs UI路由器解析中的$q承诺?
实际上,这个问题可以简化为“返回一个$http或Restangular调用,结果是一个承诺”。我的目标是在$http调用完成后解析promise对象: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
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,它也会通过