2015-02-13 1 views
0

В моем контроллере с помощью сервиса Я посылаю некоторые QR-данные для пользователей, так:angularJS: Window.alert только после того, как метод делаются

$scope.sendtoList = function() { 
     $scope.qrStatus = false; 
     angular.forEach($scope.users, function (item) {   
      if (item.Selected){ 
      inviteService.sendQR(item.Emails.main, $scope.company.Id).then(function(response) { 
       $scope.qrStatus = true;    
      }, 
      function(err) { 
       $scope.qrStatus = false;    
      }); 
      } 
     }); 
     if ($scope.qrStatus){ 
      $window.alert('QR-code has been sended successfully.'); 
     } 
     else{ 
      $window.alert('Warning! QR-code has not been sended successfully.'); 
     } 
     } 

и я вижу какое-то странное поведение: она всегда показывать предупреждение, даже если метод выполняется успешно - я думаю, что это из обещаний. Но как я могу показать окно в моем случае только после возврата сервиса servisse?

+0

Вам нужно рассматривать это неблокирующим образом, а не блокирующим способом. Ваши обещания возвращаются после завершения вашего кода. –

+0

@BrianNoah вы могли бы привести пример кода? – brabertaser19

+0

сделано. Не проверено, но что-то вокруг того, что я написал, должно работать. –

ответ

0

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

$scope.sendQRtoList = function() { 
    $scope.qrStatus = false; 
    var count = 0; 
    var length = $scope.users.length; 
    var error = 0; 
    angular.forEach($scope.users, function (item) { 
     if (item.Selected){ 
      inviteService 
       .sendQR(item.Emails.main, $scope.company.Id) 
       .then(function(response) { 
        //yay! 
       }, 
       function(err) { 
        error++; 
       }) 
       .finally(function() { 
        count++; 
        if (count === length && error === 0) { 
         $window.alert('QR-code has been sent successfully.'); 
        } 
        if (count === length && error !== 0) { 
         $window.alert('Warning! QR-code has not been sent successfully.') 
        } 
       }); 
     } 
    }); 
}; 

.finally() происходит на каждое обещание, что, где вы хотите добавить свой счетчик приращения.

0

Надежда один из следующих помогает

1) Попробуйте посмотреть на следующий пост: $success call back function from AngularJS

Its аналогичный вопрос и JS скрипку следующее может помочь: http://jsfiddle.net/E5HGy/6/

2) Счетчик, как изложенное выше, также решило бы проблему, например,

if(i == selector.length) 
    // "callback" 

будет эссенциально решать i t

Смежные вопросы