Existe-t-il un moyen de passer un appel synchrone avec AngularJS?
La documentation AngularJS n'est pas très explicite ou exhaustive pour comprendre certains éléments de base.
SUR UN SERVICE:
myService.getByID = function (id) {
var retval = null;
$http({
url: "/CO/api/products/" + id,
method: "GET"
}).success(function (data, status, headers, config) {
retval = data.Data;
});
return retval;
}
Réponses:
Pas actuellement. Si vous regardez le code source (à partir de ce moment d'octobre 2012) , vous verrez que l'appel à XHR open est en fait codé en dur pour être asynchrone (le troisième paramètre est vrai):
Vous auriez besoin d'écrire votre propre service qui effectue des appels synchrones. En général, ce n'est pas quelque chose que vous voudrez généralement faire en raison de la nature de l'exécution de JavaScript, vous finirez par bloquer tout le reste.
... mais .. si vous souhaitez bloquer tout le reste, vous devriez peut-être vous pencher sur les promesses et le service $ q . Il vous permet d'attendre qu'un ensemble d'actions asynchrones soit effectué, puis d'exécuter quelque chose une fois qu'elles sont toutes terminées. Je ne sais pas quel est votre cas d'utilisation, mais cela vaut peut-être la peine d'être examiné.
En dehors de cela, si vous allez rouler votre propre, plus d' informations sur la façon de faire des appels ajax synchrones et asynchrones peuvent être trouvés ici .
J'espère que c'est utile.
la source
.then(callback)
. quelque chose comme:doSomething(); $http.get('/a/thing').then(doEverythingElse);
.J'ai travaillé avec une usine intégrée avec la saisie semi-automatique de google maps et les promesses faites, j'espère que vous servez.
http://jsfiddle.net/the_pianist2/vL9nkfe3/1/
il vous suffit de remplacer autocompleteService par cette requête avec $ http incuida devant l'usine.
et $ http request avec
la question elle-même est à poser sur:
quand vous avez bien fait et la demande:
quand il y a une erreur, et ensuite:
la source
la source
J'ai récemment rencontré une situation dans laquelle je voulais faire des appels à $ http déclenchés par un rechargement de page. La solution avec laquelle je suis allé:
la source
Voici un moyen de le faire de manière asynchrone et de gérer les choses comme vous le feriez normalement. Tout est toujours partagé. Vous obtenez une référence à l'objet que vous souhaitez mettre à jour. Chaque fois que vous mettez à jour cela dans votre service, il est mis à jour globalement sans avoir à regarder ou à retourner une promesse. C'est vraiment bien car vous pouvez mettre à jour l'objet sous-jacent à partir du service sans jamais avoir à relier. Utiliser Angular comme il est censé être utilisé. Je pense que c'est probablement une mauvaise idée de rendre $ http.get / post synchrone. Vous obtiendrez un retard notable dans le script.
Et quelque part dans une vue:
la source
Étant donné que la synchronisation XHR est obsolète, il vaut mieux ne pas s'y fier. Si vous devez effectuer une requête POST de synchronisation, vous pouvez utiliser les assistants suivants à l'intérieur d'un service pour simuler une publication de formulaire.
Cela fonctionne en créant un formulaire avec des entrées masquées qui est publié à l'URL spécifiée.
Modifiez selon vos besoins.
la source
Qu'en est-il de l'encapsulation de votre appel dans une
Promise.all()
méthode iePromise.all([$http.get(url).then(function(result){....}, function(error){....}])
Selon MDN
la source