早安,
我想知道是否有办法默认附加承诺,我会更好地解释....
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
答案 0 :(得分:1)
如果有一种链接承诺的方式
是,
参考链承诺如何运作
关于你的例子:
当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);
});