如何使用.succes和.error在Angularjs中扩展$q promise

前端之家收集整理的这篇文章主要介绍了如何使用.succes和.error在Angularjs中扩展$q promise前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在AngularJS的定制服务中写了这个小代码

在我的服务:

  1. var deferred = $q.defer();
  2. var promise = deferred.promise;
  3.  
  4. deferred.resolve('success');
  5. deferred.reject('error');
  6.  
  7. /* Handle success and error */
  8. promise.success = function(fn) {
  9.  
  10. promise.then(function(response) {
  11.  
  12. fn(response);
  13.  
  14. });
  15.  
  16. return promise;
  17. };
  18.  
  19. promise.error = function(fn) {
  20.  
  21. promise.then(null,function(response) {
  22.  
  23. fn(response);
  24.  
  25. });
  26.  
  27. return promise;
  28. };

在我的控制器:

  1. promiseService.myPromise()
  2. .success(function(data){
  3.  
  4. $scope.success= data;
  5.  
  6. })
  7. .error(function(data){
  8.  
  9. $scope.error = data;
  10.  
  11. });

我正好从承诺($ q服务)处理成功和错误。我需要这个代码在很多其他服务,所以我将直接扩展$ q服务与一个自定义

所以我想要这样的服务:

  1. var deferred = myPromiseService.$qCustom.defer();
  2. var promise = deferred.promise;
  3.  
  4. deferred.resolve('success');
  5. deferred.reject('error');
  6.  
  7. return promise;

任何想法?我发现一些解释在Angularjs中扩展过滤器,我的问题是找到扩展$ q的所有功能的好方法,并添加我的自定义

我从这样开始,可以处理$ q开箱即用:

  1. angular.module('myApp').service('myPromiseService',function($q){
  2.  
  3. $qCustom = $q;
  4.  
  5. });
这是一个完整的解决方案,在@jessegavin离开的地方。
  1. var myApp = angular.module("myApp",[]);
  2.  
  3. myApp.config(function ($provide) {
  4.  
  5. $provide.decorator('$q',function ($delegate) {
  6. var defer = $delegate.defer;
  7. $delegate.defer = function () {
  8. var deferred = defer();
  9. deferred.promise.success = function (fn) {
  10. deferred.promise.then(function(response) {
  11. fn(response.data,response.status,response.headers);
  12. });
  13. return deferred.promise;
  14. };
  15. deferred.promise.error = function (fn) {
  16. deferred.promise.then(null,function(response) {
  17. fn(response.data,response.headers);
  18. });
  19. return deferred.promise;
  20. };
  21. return deferred;
  22. };
  23. return $delegate;
  24. });
  25.  
  26. });

猜你在找的Angularjs相关文章