在我的控制器中,在服务的帮助下,我向用户发送了一些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.');
}
}
我看到一些奇怪的行为:它总是显示警告警报,即使方法成功完成 - 我认为这是有希望的。但是,只有在返回servise promisse之后,我才能在我的案例中显示窗口?
答案 0 :(得分:0)
希望以下其中一项有帮助
1)尝试查看以下帖子:$success call back function from AngularJS
它是一个类似的问题,以下js小提琴可能会有所帮助:http://jsfiddle.net/E5HGy/6/
2)如上所述的计数器也可以解决问题,例如
if(i == selector.length)
// "callback"
会以优异的方式解决它
答案 1 :(得分:0)
为了使用promises执行此操作,您需要创建一个计数器,在每次更新用户时进行检查,然后在计算完所有内容后触发警报。
$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()
发生在每个承诺上,这就是您要添加计数器增量的位置。