Mam usługi dla wywołania API w następujący sposób,
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;
}
Ale to asynchroniczny. Jak mogę go przekonwertować na synchronizację (chcę sprawić, aby poczekałem, aż otrzymam wynik)?
Po to są obietnice. Wykonaj swoje działanie, używając obietnicy, którą zwrócisz z funkcji. np. 'deffered.promise' zwróciłeś' .then (function() {/ * twoje działanie * /}) '. Lub, w twoim przypadku (ponieważ w zasadzie odpowiada to odpowiedzi http, wykonaj swoje działanie w poście fn). – haki
Myślę, że nie da się tego zsynchronizować, ALE używasz obietnicy, która pozwala ci mieć kontrolę nad nią, i możesz powiedzieć, że twoja aplikacja czeka, aż to rozwiąże/odrzuci –
Możliwy duplikat [Jak synchronizować połączenie HTTP z AngularJS ] (http://stackoverflow.com/questions/13088153/how-to-http-synchronous-call-with-angularjs) –