我怎样才能在Angularjs延长$ Q承诺与.succes和.error [英] How can I extend $q promise in Angularjs with a .succes and .error
问题描述
我在AngularJS定制服务写了这个小code。
在我的服务:
VAR推迟= $ q.defer();
VAR承诺= deferred.promise; deferred.resolve(成功);
deferred.reject('错误'); / *手柄成功和错误* /
promise.success =功能(FN){ promise.then(功能(响应){ FN(响应); }); 返回的承诺;
}; promise.error =功能(FN){ promise.then(NULL,函数(响应){ FN(响应); }); 返回的承诺;
};
在我的控制器:
promiseService.myPromise()
.success(功能(数据){ $ scope.success =数据; })
.error(功能(数据){ $ scope.error =数据; });
我探微处理从承诺($ Q服务)的成功和错误。我需要很多其他服务的这个code,所以我会直接在$ Q服务与自定义扩展。
所以我想在我的服务是这样的:
VAR推迟= myPromiseService $ qCustom.defer();
VAR承诺= deferred.promise; deferred.resolve(成功);
deferred.reject('错误'); 返回的承诺;
你知道吗?我发现了一些解释,在Angularjs延长滤芯我的问题是要找到延长$ Q的所有功能,并添加我的自定义的好方法。
我开始类似的东西,它的工作,处理$ Q开箱:
angular.module('对myApp')。服务('myPromiseService',函数($ Q){ $ qCustom = $ Q;});
下面是一个完整的解决方案,拿起其中,@jessegavin离开了。
VAR对myApp = angular.module(对myApp,[]);myApp.config(函数($提供){ $ provide.decorator('$ Q',函数($代表){
VAR延迟= $ delegate.defer;
$ delegate.defer =功能(){
VAR递延=推迟();
deferred.promise.success =功能(FN){
deferred.promise.then(功能(响应){
FN(response.data,response.status,response.headers);
});
返回deferred.promise;
};
deferred.promise.error =功能(FN){
deferred.promise.then(NULL,函数(响应){
FN(response.data,response.status,response.headers);
});
返回deferred.promise;
};
返回延迟;
};
返回$代表;
});});
I wrote this little code in a custom service in AngularJS.
In my service :
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;
};
In my controller :
promiseService.myPromise()
.success(function(data){
$scope.success= data;
})
.error(function(data){
$scope.error = data;
});
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;
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.
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;
});
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;
});
});
这篇关于我怎样才能在Angularjs延长$ Q承诺与.succes和.error的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!