我如何使用.success和.error扩展Angularjs中的$ q promise [英] How can I extend $q promise in Angularjs with a .success and .error
问题描述
我在AngularJS的自定义服务中编写了这段小代码.
I wrote this little code in a custom service in AngularJS.
为我服务:
var deferred = $q.defer();
var promise = deferred.promise;
deferred.resolve('success');
deferred.reject('error');
/* Handle success and error */
promise.success = function(fn) {
promise.then(function(response) {
fn(response);
});
return promise;
};
promise.error = function(fn) {
promise.then(null, function(response) {
fn(response);
});
return promise;
};
在我的控制器中:
promiseService.myPromise()
.success(function(data){
$scope.success= data;
})
.error(function(data){
$scope.error = data;
});
我只是处理诺言中的成功和错误($ q服务).我在许多其他服务中都需要此代码,因此我将使用自定义直接扩展$ q服务.
I juste Handle the Success and Error from the promise ($q service). I need this code in a lot of other service so I would to extend directly the $q service with a custom.
因此,我希望在服务中提供类似的信息:
So I would like something like this in my service:
var deferred = myPromiseService.$qCustom.defer();
var promise = deferred.promise;
deferred.resolve('success');
deferred.reject('error');
return promise;
有什么主意吗?我在Angularjs中找到了一些扩展过滤器的解释,我的问题是找到扩展$ q的所有功能并添加自定义的好方法.
Any idea? I found some explanation to extend filter in Angularjs my problem is to find the good way to extend all the functionality of the $q and add my custom.
我从这样的事情开始,开箱即用地处理$ q是可行的:
I start with something like that, it's work to handle the $q out of the box :
angular.module('myApp').service('myPromiseService', function($q){
$qCustom = $q;
});
推荐答案
这里是@jessegavin离开的完整解决方案.
Here's a full solution picking up where @jessegavin left off.
var myApp = angular.module("myApp", []);
myApp.config(function ($provide) {
$provide.decorator('$q', function ($delegate) {
var defer = $delegate.defer;
$delegate.defer = function () {
var deferred = defer();
deferred.promise.success = function (fn) {
deferred.promise.then(function(response) {
fn(response.data, response.status, response.headers);
});
return deferred.promise;
};
deferred.promise.error = function (fn) {
deferred.promise.then(null, function(response) {
fn(response.data, response.status, response.headers);
});
return deferred.promise;
};
return deferred;
};
return $delegate;
});
});
这篇关于我如何使用.success和.error扩展Angularjs中的$ q promise的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!