2016-04-09 35 views
3

Ben eski kodu korumak ediyorum ve bu kodun üzerine oldu:Bir açısal js sözü reddedilmez ve başarısız olur ne olur?

var deferred = $q.defer(); 
$http.post(url,{"username": username},{cache: true}) 
      .success(function (data, status, headers, config) { 
       console.log(status); 
       console.log(headers); 
       console.log(config); 
       console.log(data); 
       deferred.resolve(data); 
      }); 

return deferred.promise; 

bu http isteği hata olduğunu ne olur merak ediyorum. Bunlar, bu demek oldu? bir hata fonksiyonu ?:

 .error(function (data, status, headers, config) { 
      console.log(status); 
      console.log(headers); 
      console.log(config); 
      console.log(data); 
      deferred.reject(data); 
     }); 

cevap

0

Bu Deferred anti-pattern kategoriye düşen sağlamak için bu güncelleme Should. Tüm $http yöntemlerinin tümü kendi başına bir söz verdiğinden, tek yapmanız gereken geri vermektir, başka bir ertelenmiş nesne oluşturmayın. Bir istek başarısız olduğunda, işlevin kendisi reddedilen sözü verir.

Örnek

function saveSomething(url, username) { 
    return $http.post(url,{"username": username},{cache: true}); 
} 

// usage 
saveSomething('http://whatever', 'myUserName') 
.then(function(data) { 
    console.log(data); 
}) 
.catch(function(error) { 
    console.log(error); 
});