Dans les activités réelles, vous devez souvent attendre plusieurs demandes à compléter avant de procéder à l'étape suivante. Mais $ http dans angularjs ne prend pas en charge les demandes synchrones.
Solution 1:
La copie de code est la suivante:
$ http.get ('url1'). Success (fonction (d1) {
$ http.get ('url2'). Success (fonction (d2) {
// Traitement la logique
});
});
Solution 2:
Les méthodes dans ensuite seront exécutées dans l'ordre.
La copie de code est la suivante:
var app = angular.module ('app', []);
app.Controller ('promisControl', fonction ($ scope, $ q, $ http) {
fonction getjson (url) {
var différé = $ q.defer ();
$ http.get (URL)
.success (fonction (d) {
d = parseInt (d);
console.log (d);
Resolve différé (d);
});
retour différé.promes;
}
getjson ('json1.txt'). puis (fonction () {
return getjson ('json2.txt');
}). puis (fonction () {
return getjson ('json1.txt');
}). puis (fonction () {
return getjson ('json2.txt');
}). puis (fonction (d) {
console.log ('end');
});
});
Solution trois:
Le premier paramètre de la méthode $ q.all peut être un tableau (objet). Une fois tout le contenu du premier paramètre exécuté, la méthode dans ensuite sera exécutée. Toutes les valeurs de retour de la méthode du premier paramètre sont passées en tant que tableau (objet).
La copie de code est la suivante:
var app = angular.module ('app', []);
app.Controller ('promisControl', fonction ($ scope, $ q, $ http) {
$ q.all ({premier: $ http.get ('json1.txt'), deuxième: $ http.get ('json2.txt')}). alors (fonction (arr) {
console.log (arr);
angular.ForEach (arr, fonction (d) {
console.log (d);
Console.log (D.Data);
})
});
});
Il existe de nombreux tutoriels sur l'utilisation détaillée de $ q. Je me contacte aussi. Si vous ne pouvez pas bien parler, vous n'osez pas parler de bêtises. Le code ci-dessus a été écrit selon ma compréhension, et il n'y avait aucun problème après les tests.