2014-10-28 32 views
6

Ben, şu şekilde API çağrısı için

getValue: function(input) { 
     var deferred, url; 
     deferred = $q.defer(); 
     url = "url"; 
     $http.post(url, input).success(function(data, status, headers, config) { 
      return deferred.resolve({ 
      success: true, 
      data: data, 
      status: status, 
      headers: headers, 
      config: config 
      }); 
     }).error(function(data, status, headers, config) { 
      return deferred.resolve({ 
      success: false, 
      data: data, 
      status: status, 
      headers: headers, 
      config: config 
      }); 
     }); 
     return deferred.promise; 
     } 

bir servis var ama bu zaman uyumsuz olduğunu. Senkronizasyona nasıl dönüştürebilirim (sonuca ulaşana kadar beklemesini istiyorum)? Eğik ile mümkün değildir

+1

Bu, vaatlerin ne için olduğu. İşlemden döndüğünüz sözü kullanarak eyleminizi gerçekleştirin. ör. 'deffered.promise' döndürdüğünüz' .then (function() {/ * eyleminiz * /}) '. Ya da sizin durumunuzda (temelde http yanıtını çözdüğü için, eyleminizi post fn'de gerçekleştirin). – haki

+1

Bunun mümkün değil eşitleme yapmak düşünmek, ANCAK sen bunu kontrol olanağı sağlayan söz kullanarak ve bunu çözecektir alana kadar uygulama bekleyin anlatmak/içinde –

+0

Olası yinelenen reddedebilir [angularjs ile http Senkron çağrıyı, $ nasıl ] (http://stackoverflow.com/questions/13088153/how-to-http-synchronous-call-with-angularjs) –

cevap

6

yok. XMLHttpRequest yanlış uyumlu ve gerçek senkronize değildir false veya true, ayarlanabilir bir xhr.open() içinde

xhr.open(method, url, true); 

Üçüncü parametre ile açılır burada

https://github.com/angular/angular.js/blob/master/src/ng/httpBackend.js#L51 bakınız. Açısal durumda, true kodlanmıştır, böylece tüm giden çağrılar eşzamansız olacaktır.

orada yapmak istediğini yapmak sonra zaman uyumsuz çağrı dönünceye kadar beklemek .success() geri arama kullanın ve.

Yorumlardaki öneriye göre, elbette ham javascript, jQuery veya eşzamanlı çağrıları destekleyen başka bir kitaplık aracılığıyla da arama yapabilirsiniz, ancak senkronize olmayan açısal aramayla geri aramaları/defersleri kullanmanızı öneririm çünkü senkronize Aramalar engelleniyor ve engelleme kötü.

+1

Ya jquery zaman uyumsuz param o jquery http://api.jquery.com/jquery kullanıyorsa. ajax/ –

+0

bir açısal hizmetinde isteği http.get $ yanıtının verileri kullanarak ve ben tepki biraz zaman aldı ve bağlı zaman uyumsuz doğaya çünkü benim kod servisini arayıp kod çağırmak için kullanılan yapıyor zor anlar yaşadı. Engellemeyi kullanmadım, ancak application.html dosyasında veri aktardım ve hizmetin çağrılmasından önce oradan aldım. Bunu yapmanın doğru yolu olup olmadığını bilmiyorum ama bu işe yarıyor. –