我在使用异步函数时遇到了这个问题。关键是“执行”不是等待 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;
}
}
}
控制台输出
> 确认:未定义
(之前用户按下按钮)
> 调用回调函数!!!
(AFTER 用户按下按钮)
最佳答案
问题是您要在数据实际返回之前解决 promise 。您需要让您的 onConfirm
函数访问 NotificationService.confirm
正在返回的 promise ,并且只在其中调用 resolve
。
关于javascript - AngularJS 和服务内部的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582932/