2016-09-15 2 views
0

Я пытаюсь создать одностраничное приложение AngularJS с Java Spring в качестве службы отдыха.Angularjs завершает все обещания перед уничтожением страницы

В настоящее время мой контроллер позволяет мне сохранить все заполненные данные в задней части, которые у меня есть что-то вроде этого в моем коде:

$scope.$on('$destroy', function() { 
    personalDataService.saveData.query({}, { 
     personalData: $scope.personalData 
    }, function (res) { 
     console.log(res); 
    }); 
}); 

В другой странице, я загрузил часть данных из того же таблицу, чтобы сделать некоторую проверку, например, проверить, является ли пользователь женщиной, чтобы определить, что ей нужно заполнить другую форму.

Проблема в том, что я покидаю эту страницу, обещание сохранения еще не возвращается, вторая страница загружена и данные не завершены. Если я снова обновляю вторую страницу, тогда все возвращается к нормальному состоянию

Есть ли способ убедиться, что все обещания были возвращены, прежде чем уничтожить/покинуть эту страницу?

+0

Вы можете использовать перехватчики, чтобы постоянно отслеживать все обещания. И в зависимости от статуса обещания вы можете включить или отключить ссылку на вторую страницу. –

+0

Если данные должны охватывать сеансы, используйте cookie или localStorage, оба из которых адресованы синхронно. В противном случае сохраните данные в javascript. –

ответ

-1

построить массив всех ваших обещаний, работающих (например, путем сохранения их в service, в $rootScope или через events) и ждать завершения с помощью $q.all():

$scope.$on('$destroy', function() { 
    $q.all($rootScope.promises).then(function(){ 
     console.log('all promises finished'); 

    }); 
} 
+0

причина для downvote, downvoter? – Luxor001

0

После того, как обещание разрешено, испускает событие.

function saveFields() { 

    var deferred = $q.defer(); 

    // in your save fields function, resolve the promise on success save or reject the promise on error. 

     onSaveCall(args, onSuccess, onFail); 

     var onSucess = function() {deferred.resolve()}; 

    return deferred.promise; 
} 

$scope.$on('destroy', function() { 
    onSaveCall.then(function() { 
     // Here your save fields is resolved then write your code to emit or notify. 
    }) 
}) 

Если у вас есть более чем один обещание использовать promises.all https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Смежные вопросы