Привет, я использую angularjs 1.6 в своих проектах, и у меня проблема с запросами $ http, или я не знаю, что там происходит. Я постараюсь объяснить проблему ниже;
app.controller('ctname', function($scope, fcname){
$scope.calledFunc = function(){
fcname.serviceFunction(12).then(function(response){
if (response.data != null){
//fill modal's model here
}
});
//Open modal
$('#SomeModal').modal('show');
};
})
.factory('fcname', function($http){
var fac = {};
fac.serviceFunction= function (someId) {
return $http({
url: '/Home/someBackEndMethod',
data: JSON.stringify({ _someId: someId}),
method: 'POST',
headers: { 'content-type': 'application/json' }
});
};
return fac;
});
Что именно происходит, так это то, что мое модальное окно открывается до того, как служба выполняет свою работу, поэтому мое модальное окно иногда открывается пустым. Что я могу с этим поделать?
Это потому, что ваш модальный экран открывается перед вашей служебной функцией. Вы можете использовать обещание ИЛИ вы можете открыть `if (response.data! = Null) {$ ('# SomeModal'). Modal ('show');} внутри вашего успеха.
Спасибо за проявленный интерес, следует ли мне заменить .then () на .finally () или проверить его синтаксис.


JavaScript и платформа AngularJS используют неблокирующий асинхронный ввод-вывод. Последующий код всегда выполняется перед обработчиками событий, предоставленными для этих операций ввода-вывода.
Код, который необходимо выполнить после операции ввода-вывода, необходимо поместить внутри в обработчик событий:
app.controller('ctname', function($scope, fcname){
$scope.calledFunc = function(){
fcname.serviceFunction(12)
.then(function(response){
if (response.data != null){
//fill modal's model here
}
}).catch(function(error) {
console.info(error);
}).finally(function() {
//Open modal
$('#SomeModal').modal('show');
});
};
})
Поместите код либо в исходный блок .then, либо в последующий блок прикованный.
Спасибо за интерес, и вся информация выглядит нормально, я постараюсь.
Сервис
$httpобрабатывает запросы как асинхронные обратные вызовы. Данные могут поступить всего за несколько миллисекунд или за минуту. Итак,$('#SomeModal').modal('show')выполняется. передfcname.serviceFunction(12)разрешен. Вероятно, вам нужно открыть модальное окно внутри.then()при поступлении данных (или в.finally(), как для успешных, так и для ошибочных ответов)