2015-06-11 488 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); 
      } 
     }) 
}