Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $http附加默认承诺_Angularjs - Fatal编程技术网

Angularjs $http附加默认承诺

Angularjs $http附加默认承诺,angularjs,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

早上好

我想知道是否有一种方法可以在默认情况下附加一个承诺,我会更好地解释

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

如果有一种方法可以把承诺拴起来

  • 您可以链接承诺来创建代码流
  • 优点之一:错误会传播,因此您可以在测试结束时捕获它 链子
参考链承诺的工作原理

关于你的例子:

我认为当
$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);
   });
因此,在控制器中,我们可以编写:

         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);
   });

$http.post
已返回承诺。而这个承诺已经被束缚住了。问题是什么?是的,我知道。好的,我需要在第一个之后再链接另一个,因为我有点懒,我只是想知道我是否可以定义一个地方,在第一个承诺之后,为我服务中的每个呼叫附加另一个(不需要手动执行)。是的,你可以这样做。您只需在第一个
内返回另一个承诺,然后返回