Я хочу выполнить код за несколько шагов. Можно ли это сделать?
Сначала я хочу решить все эти обещания
$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);
}
}
);
}
};
Когда обещания решены, я хочу рассчитать $scope.recentUnreported
на основе $scope.recentReported
. Это будет массив, содержащий даты, которые не были в $scope.recentReported
.
Как только это будет сделано, я хочу ng-повторить директиву для каждой даты в $scope.recentUnreported
Может быть, что-то вроде следующего? Код не проверен.
JavaScript
$scope.recentReported = [];
$scope.getRecentReported = function () {
var dateToday = new Date();
var promises = [];
for (i = 0; i < $scope.recentDateLength; i++) {
var dateThen = moment(dateToday).add(-i, 'days');
promises.push(RestRequestsSrvc.getRevenue(dateThen));
}
$q.all(promises).then(function(response){
for(var i = 0; i < response.length; i++){
$scope.recentReported.push(response[i].date);
}
$scope.recentUnreported = $scope.getUnreported(); // Do what you need to do.
});
};
HTML
<div my-directive ng-repeat="unreported in recentUnreported"></div>
Вы можете использовать $ q.all (обещания) здесь. Это дает вам обещание, которое будет разрешено, как только все обещания будут разрешены.
Надеюсь, это поможет.
Вы можете подождать, пока все обещания будут решены с помощью Promise.all
Затем вы получите одно обещание, которое, после его разрешения, будет иметь массив значений, именно этого вы ищите.
$q.all()
.
$scope.recentReported
обещания и в одном случае установить$scope.recentReported
также в директиве watch$scope.recentReported
если она изменена, затем выполнить логику. вот отличная статья о обещаниях solutionoptimist.com/2013/12/27/javascript-promise-chains-2