Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularJS:window.alert仅在方法完成后发出_Javascript_Angularjs - Fatal编程技术网

Javascript angularJS:window.alert仅在方法完成后发出

Javascript angularJS:window.alert仅在方法完成后发出,javascript,angularjs,Javascript,Angularjs,在我的控制器中,借助服务,我向用户发送一些qr数据,以便: $scope.sendtoList = function () { $scope.qrStatus = false; angular.forEach($scope.users, function (item) { if (item.Selected){ inviteService.sendQR(item.Emails.main, $sco

在我的控制器中,借助服务,我向用户发送一些qr数据,以便:

    $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.');
        }
      }

我看到了一些奇怪的行为:它总是显示出警告警报,即使方法成功地完成了——我认为这是一种承诺。但我怎么能在退票后才在我的箱子里展示橱窗呢

希望以下其中一项能有所帮助

1) 请尝试查看以下帖子:

这是一个类似的问题,下面的js fiddle可能会有所帮助:

2) 如上所述的计数器也可以解决问题,例如

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

要想彻底解决这个问题,您需要创建一个计数器,在每次更新用户时进行检查,然后在计算完所有信息后触发警报

$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()
发生在每个承诺上,这就是您要添加计数器增量的地方。

您需要以非阻塞方式而不是阻塞方式处理此问题。在代码完成后,您的承诺又回来了。@BrianNoah您能提供代码示例吗?完成。没有经过测试,但我发布的内容应该能起作用。