2016-04-06 15 views
1

1 gibi 2 varyasyonu buldum. Deferred.resolve(); 2. deferred.resolve (veri); Servis yanıtından sonradeferred.resolve (data) arasındaki fark nedir; ve deferred.resolve(); angularJS servis çağrılarında?

. 2 arasındaki fark nedir? Kesinlikle kullanacağım hangisi.

+1

Bazı verilerden geçiyorsunuz. Bazı verileri iletmeniz gerektiğinde kullanmalısınız. –

+1

Birincisi, veriyi herhangi bir veri göndermeden, resolv işlevini, ikincisini ise çözümlenen fonksiyona 'data' gönderir –

cevap

3

İlk senaryo:

function getPromise() { 
    var deferred = $q.defer(); 
    deferred.resolve(); 

    return deferred.promise; 
} 

getPromise().then(
    function(data) { 
     console.log(data); // Output "undefined" 
    } 
); 

İkinci senaryo: Yani

function getPromise() { 
    var deferred = $q.defer(); 
    var data = "hello"; 
    deferred.resolve(data); 

    return deferred.promise; 
} 

getPromise().then(
    function(data) { 
     console.log(data); // Output "'hello'" 
    } 
); 

ile veya işlev bilgi geçmeden, söz gidermek nasıl hakkında tüm çözümlenmiş söz.

1

Bir servisi aradığınızda, bir sunucunun yanıtını beklediğiniz anlamına gelir. Yanıt, basit bir başarı veya bazı veriler olabilir. Hizmetin işlevi çağrısında birine geri tepki sunucusunu yolluyorum Yukarıdaki Exemple olarak

myServiceFunction = function(){ 
var deferred = $q.defer(); 
    $http.post/get(myURL,someData/*not mandatory*/) 
     .success(function(response){ // you get into this function when everything goes right 
      deferred.resolve(response); //your sending back the server's response to your controller (or whatever has called this function) 
    }) 
    .error(function(response){ 
      deferred.reject(response); // your also sending back the server's response but using reject means that something gone wrong on server call 
}) 
return deferred.promise; // don't forget to send the promise!! 
} 

.

Ancak, yalnızca isteğin başarılı olduğunu bilmeniz gerekiyorsa, basit bir deferred.resolve() yeterlidir (ve bunun başarısız olduğunu söylemek için deferred.reject() -).

bilmeniz gereken buydu, daha kısa yapmak için:

  • deferred.resolve() - (istek
  • deferred.resolve başarısız - istek
  • deferred.reject() başarılı demektir data) - istek başarılı oldu ve burada bazı veriler
  • ertelenmiş.reje (veri) - istek başarısız oldu ve burada; bazı veriler

yeterince açıktır Umut

+1

' return deferred.promise; ' –

+0

'yi de ekleyiniz. “Ertelenmiş Antipattern”? (http://stackoverflow.com/questions/30750207/is-this-a-deferred-antipattern). – georgeawg