angular $ http附加默认承诺

时间:2013-12-19 12:19:26

标签: angularjs

早安,

我想知道是否有办法默认附加承诺,我会更好地解释....

module.factory('serviceName', function($http) {
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";

return {
        call1: function(callback) {
            return $http.post('url1/something').then(callback);
        },
        call2: function(param1, param1, callback) {
            return $http.post('url2/something', $.param({param1: param1, param2: param2, })).then(callback);
        }
    };
});

这基本上是我的服务,我想知道是否有一种方法可以在每次通话结束时使用$ http.default.something等链接一个承诺 这将非常有用:D

1 个答案:

答案 0 :(得分:1)

  

如果有一种链接承诺的方式

  • 您可以链接承诺以创建代码流
  • 优点之一:错误传播,所以你可以在结束时捕获它 链

参考链承诺如何运作

enter image description here

关于你的例子:

callback返回承诺时,我不认为这是使用$http.post的好方法。

如果您想创建工厂退货承诺,可以写:

         var request = function(data) {
                        var deferred = $q.defer();
                        var configHttp = {
                                method: 'POST',
                                url: 'some URL'
                        };
                        if (data !== undefined) {
                                configHttp.data = data;
                        }
                        $http(configHttp).success(function(data, status, headers) {
                                if (data.error === undefined) {
                                        deferred.resolve(data);
                                } else {
                                        deferred.reject(data);
                                }
                        }).error(function(data, status, headers) {
                                deferred.reject(data);
                        });
                        return deferred.promise;
                }
               return {
                    call1: function(param1) {
                            return request('get_1', {param: param1});
                    },
                    call2: function(param2) {
                            return request('get_2', {param: param2});
                    }

所以在控制器中我们可以写:

 serviceName.call1..then(function(result)
 {               
              //....

   }, function(error) {
     alert(error.message);
   });