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