В реальном бизнесе вам часто нужно ждать, чтобы заполнить несколько запросов, прежде чем выполнять следующий шаг. Но $ http в AngularJS не поддерживает синхронные запросы.
Решение 1:
Кода -копия выглядит следующим образом:
$ http.get ('url1'). Успех (function (d1) {
$ http.get ('url2'). Успех (функция (d2) {
// Обработка логики
});
});
Решение 2:
Методы в затем будут выполнены по порядку.
Кода -копия выглядит следующим образом:
var app = angular.module ('app', []);
app.controller ('promisecontrol', function ($ scope, $ q, $ http) {
функция getJson (url) {
var deferred = $ q.defer ();
$ http.get (url)
.success (function (d) {
d = parseint (d);
console.log (d);
отсрочен. Resolve (D);
});
return DEFERRED.PROMISE;
}
getjson ('json1.txt'). Затем (function () {
вернуть getjson ('json2.txt');
}). Тогда (function () {
вернуть getjson ('json1.txt');
}). Тогда (function () {
вернуть getjson ('json2.txt');
}). Тогда (function (d) {
console.log ('end');
});
});
Решение три:
Первым параметром метода $ Q.all может быть массив (объект). После того, как все содержимое первого параметра выполняется, будет выполнен метод в затем. Все возвращаемые значения метода первого параметра передаются как массив (объект).
Кода -копия выглядит следующим образом:
var app = angular.module ('app', []);
app.controller ('promisecontrol', function ($ scope, $ q, $ http) {
$ Q.all ({First: $ http.get ('json1.txt'), второе: $ http.get ('json2.txt')}). Тогда (function (arr) {
console.log (arr);
angular.foreach (arr, function (d) {
console.log (d);
Console.log (D.Data);
})
});
});
Есть много учебных пособий по подробному использованию $ Q. Я тоже просто связываюсь. Если вы не можете говорить хорошо, вы не смеете говорить о глупости. Приведенный выше код был написан в соответствии с моим пониманием, и после тестирования не было проблем.