我怎样才能在Angularjs延长$ Q承诺与.succes和.error [英] How can I extend $q promise in Angularjs with a .succes and .error

查看:133
本文介绍了我怎样才能在Angularjs延长$ Q承诺与.succes和.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆