我想使用promise並通過rootScope訪問它,而不是使用return語句。我遇到的問題是,在我的決心完成之前,承諾已經解決。在下面的代碼中,我的ajax調用中的successFunction在defer.resolve()完成之前得到執行。無論如何,我可以讓我的成功函數等待,直到我的defer.resolve在app-directive中完成後?這裏是我的代碼:Angular:通過rootScope分配和訪問承諾
APP-directive.js
function(app) {
app.directive('spinner', function ($uibModal, $timeout, $q) {
return {
restrict: 'E',
replace: true,
template: [
'<div style="display:none;" class="modal-dialog">',
'<div class="modal-header ng-scope" style="text-align: center;">',
' {{spinnerMessage}}',
'</div>',
'<div class="modal-body ng-scope">',
' <img class="spinner-image" ng-src="../../Content/img/spinner.gif" />',
'</div>',
'</div>'
].join(''),
link: function (scope, element) {
scope.$watch(function() {
return scope.$root.loadMask
}, function() {
if (scope.$root.loadMask == true) {
scope.spinnerModal = $uibModal.open({
template: element[0].innerHTML,
size: 'sm',
backdrop: 'static',
keyboard: 'false'
});
}
else {
var defer = $q.defer();
$timeout(function() {
defer.resolve(scope.spinnerModal.close())
}, 3000);
scope.$root.spinnerClosed = defer.promise;
}
}, true);
}
ajaxService.js
app.register.service('ajaxService', ['$http', '$rootScope', function ($http, $rootScope) {
this.AddUser = function (user, successFunction, errorFunction) {
// Initialization
$rootScope.loadMask = true;
$http.post('Account/AddUser', user)
.success(function (response, status, headers, config) {
$rootScope.loadMask = false;
$rootScope.spinnerClosed.then(function (result) {
successFunction(response, status);
});
})
.error(function (response, status) {
$rootScope.loadMask = false;
$rootScope.spinnerClosed.then(function (result) {
errorFunction(response, status);
});
});
}