Я хочу выполнить запрос http/rest в течение 30 дней и заполнить массив датами, которые не вернули ответ. Каков хороший способ сделать это? Я не очень хорошо разбираюсь в этом и считаю его запутанным из-за асинхронного характера запросов http/rest.
Приведенный ниже код работает, но он сохраняет последние сообщения. Я хочу сохранить последние незарегистрированные.
$scope.recentReported = [];
$scope.getRecentReported = function () {
var dateToday = new Date();
for (i = 0; i < $scope.recentDateLength; i++) {
var dateThen = moment(dateToday).add(-i, 'days');
RestRequestsSrvc.getRevenue(dateThen)
.then(
function (response) {
if (response) {
$scope.recentReported.push(response.date);
}
}
);
}
};
Чтобы получить эту работу, вам нужно использовать $ q и связать свои $ http-звонки. Сначала получите массив с датами:
var dates = [];
for (i = 0; i < $scope.recentDateLength; i++) {
dates.push(moment(dateToday).add(-i, 'days'));
}
Затем соедините свои вызовы так:
$q.all(dates.map(function(dateThen){
return RestRequestsSrvc.getRevenue(dateThen);
})).then(function(results){
//results now contains some null values for the responses that did not return any value
results.forEach(function(result, resultIndex){
if(!result){
$scope.recentUnReported.push(//your fill up here);
};
});
});
RestRequestsSrvc.getRevenue
не разрешает обещание для незарегистрированного? Это кажется плохой идеей. Вместо этого пусть он отклонит обещание или вернет код ошибки.