加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 08:03:19 所属栏目:安全 来源:网络整理
导读:我在AngularJS的自定义服务中编写了这个小代码。 在我的服务中: var deferred = $q.defer(); var promise = deferred.promise; deferred.resolve('success'); deferred.reject('error'); /* Handle success and error */ promise.success = function(fn) {
我在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;

            });

我juste处理承诺的成功和错误($ q服务)。我需要在很多其他服务中使用此代码,因此我希望使用自定义直接扩展$ q服务。

所以在我的服务中我想要这样的东西:

var deferred = myPromiseService.$qCustom.defer();
    var promise = deferred.promise;

    deferred.resolve('success');
    deferred.reject('error');

    return promise;

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

我从类似的东西开始,处理$ q开箱即用:

angular.module('myApp').service('myPromiseService',function($q){

  $qCustom = $q;  

});
这是@jessegavin离职的完整解决方案。
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.headers);
        });
        return deferred.promise;
      };
      return deferred;
    };
    return $delegate;
  });

});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读