Можно ли сначала разрешить обещания, затем установить массив, а затем создать директиву для каждого элемента?

0

Я хочу выполнить код за несколько шагов. Можно ли это сделать?

  1. Сначала я хочу решить все эти обещания

    $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);
              }
            }
          );
      }
    };
    
  2. Когда обещания решены, я хочу рассчитать $scope.recentUnreported на основе $scope.recentReported. Это будет массив, содержащий даты, которые не были в $scope.recentReported.

  3. Как только это будет сделано, я хочу ng-повторить директиву для каждой даты в $scope.recentUnreported

Теги:

3 ответа

1
Лучший ответ

Может быть, что-то вроде следующего? Код не проверен.

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>
0

Вы можете использовать $ q.all (обещания) здесь. Это дает вам обещание, которое будет разрешено, как только все обещания будут разрешены.

Надеюсь, это поможет.

0

Вы можете подождать, пока все обещания будут решены с помощью Promise.all

Затем вы получите одно обещание, которое, после его разрешения, будет иметь массив значений, именно этого вы ищите.

  • 0
    Если он использует обещания в AngularJS, то, возможно, в этом случае ему следует использовать $q.all() .
  • 0
    Хорошая точка зрения. Однако, пока $ q соответствует стандарту Promise A +, никакого вреда не должно быть;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню