Javascript angularJS:window.alert仅在方法完成后发出
在我的控制器中,借助服务,我向用户发送一些qr数据,以便: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
$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您能提供代码示例吗?完成。没有经过测试,但我发布的内容应该能起作用。