我需要在success / then函数中拒绝$http
promise调用。我可以看到两个选项:1)抛出一个错误 - 这会使控制台变得混乱,并且2)使用单独的延迟调用并拒绝它。有更干净/更简洁的方式吗?我有一种感觉,我忽略了一些明显的东西。
错误:
return $http.get(url}.then(function(r) {
throw new Error('Booh');
});
使用$ q:
var deferred = $q.defer();
$http.get(url}.then(function(r) {
deferred.reject("Booh");
});
return deferred.promise;
答案 0 :(得分:2)
试试这个:
function myfunction()
{
return $http.post('url')
.then(function(response){
// check success-property of returned data
if(response.data === 'Something you dont want')
return $q.reject('some error occured');
else{
return $q.resolve(response.data);
}
})
}
答案 1 :(得分:0)
由于$ http是修改后的承诺,所以执行以下操作:
var deferred = $q.defer();
$http.get(url).success(function(r) {
if(r != 'your criteria')
deferred.reject("Booh");
else
deferred.resolve("Baah");
}).error(function(){
deferred.reject("Beeh");
});
return deferred.promise
答案 2 :(得分:0)
您可以使用$ q服务的de reject方法,将其转发到下一个错误部分,例如:
var deferred = $q.defer();
$http.get(url}.success(function(r) {
deferred.reject();
}).error(function(){
// do something
});
成功时,q.reject会转发错误并执行某些操作......