【发布时间】:2013-12-14 11:53:31
【问题描述】:
我在使用异步函数时遇到了这个问题。关键是“执行”不是等待NotificationService.confirm回调的返回。
我的意思是,这会显示一个 PhoneGap 警报,但它不会等待评估用户按下了哪个按钮。因此,您可以在控制台输出中看到 undefined 而不是 false/true/3 值
[编辑]
这是 Maxim 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;
}
}
}
控制台输出
> Confirm: undefined(之前用户按下按钮)
> Callback function called!!!(之后用户按下按钮)
【问题讨论】:
标签: javascript angularjs cordova