我想使用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);
});
});
}