2015-06-11 269 views
4

我需要在成功/然后函数中拒绝$http promise调用。我可以看到2个选项: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

这听起来像是为[拦截](HTTPS作业://文档.angularjs.org/api/ng/service/$ http#拦截器) – Cerbrus

+0

为什么你想首先拒绝成功处理程序? –

+0

@ code-jaff - $ http的成功定义与我自己的定义不同。有时它会成功返回无效数据,所以我希望调用函数具有“正确”的响应。 – cyberwombat

回答

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 
+0

我不能做第二次,因为我需要拒绝一个成功的结果(结果是成功的,但不符合我的标准)。我目前使用第一种解决方案,但希望更简洁的方式 – cyberwombat

+0

我已经编辑了我的答案 – Freezystem

0

您可以使用去拒绝的方法$ q服务立刻转到下一个错误部分,如:

var deferred = $q.defer(); 

$http.get(url}.success(function(r) { 
    deferred.reject(); 
}).error(function(){ 
    // do something 
}); 

当成功q.reject将转发到错误,并做一些事情......

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