我有一個異步函數的這個問題。關鍵是「執行」不等待NotificationService.confirm
回調的返回。AngularJS和一個服務內部的異步函數
我的意思是,它顯示了一個PhoneGap警報,但它並沒有等待評估哪個按鈕按下了用戶。所以,你可以在控制檯輸出undefined
看到,而不是假/真/ 3的值
[編輯]
這是馬克西姆叫喊着提出的代碼,但它不工作尚未:
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
(BEFORE用戶按壓按鈕)
> Callback function called!!!
(AFTER用戶按壓按鈕)
示例闖入者:http://plnkr.co/edit/VfqJkJO2n7FFLWoTO2Bp – blacksoul