У меня возникла проблема с функцией async. Дело в том, что «исполнение» не ждет возврата обратного вызова NotificationService.confirm
.AngularJS и функция async внутри службы
Я имею в виду, что показывает предупреждение PhoneGap, но он не ждет, чтобы оценить, какая кнопка нажала на пользователя. Таким образом, вы можете увидеть в консоли вывода undefined
вместо ложных/Истинные/3 значения
[EDIT]
Это код, предложенный Максим Shoutin, но пока не работает:
NotificationController.js
angular.module('app').controller("NotificationController", function($rootScope) {
$rootScope.cancel_button = function() {
var confirm = NotificationService.confirm("Do you want to confirm?", 'Yes!');
confirm.then(function(result) {
console.log('Confirm: ' + result);
if(confirm) $location.path('/menu');
}, function(result) {
console.log('No data returned');
})
}
/* Additional controller code... */
}
NotificationService.js
angular.module('app').factory("NotificationService", function() {
// Callback function
var onConfirm = function(button) {
console.log('Callback function called!!!');
if(button == 1) return false;
else if(button == 2) return true;
else if(button == 3) return 3;
else return false; // dismissed without press button
};
return {
confirm : function(alert_msg, title, buttonsArray) {
var deferred = $q.defer();
if(buttonsArray == null) {
buttonsArray = ['Cancel', 'OK'];
}
var data = navigator.notification.confirm(
alert_msg, // message
onConfirm, // callback
title, // title
buttonsArray // buttonsArray
);
deferred.resolve(data);
return deferred.promise;
}
}
}
CONSOLE OUTPUT
> Confirm: undefined
(ПЕРЕД пользователь нажал кнопку)
> Callback function called!!!
(ПОСЛЕ пользователь нажал кнопку)
Пример plunker: http://plnkr.co/edit/VfqJkJO2n7FFLWoTO2Bp – blacksoul