Я искал сверху и снизу, но я просто не могу понять q.defer() и создать свое собственное обещание.
У меня есть служба getDataService
, которая делает именно это — $http.gets
данные с сервера REST. Однако одновременно может быть отправлена только одна из каждой переменной, поэтому, если пользователь хочет запросить у сервера две сущности и вернуть все связанные данные, он должен отправить два запроса. Из-за этого мне пришлось использовать метод, который сохранял i
в качестве фактического счетчика (замыкания), который затем запускал мою функцию получения данных соответствующее количество раз:
keepICorrect: function (security) {
var self = this;
for (var i = 0 ; i < entity.length; i++) {
self.getDataFromREST(security, i);
}
},
Я вызываю это из моего основного контроллера как обещание:
$scope.apply = function (security) {
var myDataPromise = getDataService.keepICorrect(security);
myDataPromise.then(function () {
//DO STUFF
}, 1);
}, function (error) {
alert("Error Retrieving Data");
return $q.reject(error);
});
}
Это работало при использовании .getDataFromREST()
, но, очевидно, не работает сейчас, так как мне нужно выполнить маршрут через мою новую функцию цикла, keepICorrect()
.
Мой вопрос заключается в том, как мне создать обещание, которое простирается от моей службы до моего контроллера, но не только это, а также ожидает разрешения или сбоя в зависимости от того, было ли выполнено i
количество запросов?