拒绝Angular $ http承诺

时间:2015-06-11 05:59:21

标签: javascript angularjs

我需要在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;

3 个答案:

答案 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会转发错误并执行某些操作......