UI-Router Resolve 中的 $q Promise?
$q Promise in UI-Router Resolve?
其实这道题可以简化为"Return an $http or Restangular call result in a promise"。我的目标是拥有一个在 $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;
});
目标是无论解析成功与否,控制器都会被实例化。我的问题? Resolve只能接受一个promise,所以:`deferredCall.promise。我如何使用 Resolve / through a service 通过上面的调用来解决这个承诺?服务方法的结果是承诺吗?
比如我创建一个服务,其方法调用 $http 然后 returns deferredCall?
这是我们在项目中解析数据的方式:
Angular $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"));
}
}
})
实用程序服务:
.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)
其实这道题可以简化为"Return an $http or Restangular call result in a promise"。我的目标是拥有一个在 $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;
});
目标是无论解析成功与否,控制器都会被实例化。我的问题? Resolve只能接受一个promise,所以:`deferredCall.promise。我如何使用 Resolve / through a service 通过上面的调用来解决这个承诺?服务方法的结果是承诺吗?
比如我创建一个服务,其方法调用 $http 然后 returns deferredCall?
这是我们在项目中解析数据的方式:
Angular $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"));
}
}
})
实用程序服务:
.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)