Запросы Angularjs $ http передаются без завершения работы

Привет, я использую 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;
});

Что именно происходит, так это то, что мое модальное окно открывается до того, как служба выполняет свою работу, поэтому мое модальное окно иногда открывается пустым. Что я могу с этим поделать?

Сервис $http обрабатывает запросы как асинхронные обратные вызовы. Данные могут поступить всего за несколько миллисекунд или за минуту. Итак, $('#SomeModal').modal('show') выполняется. передfcname.serviceFunction(12) разрешен. Вероятно, вам нужно открыть модальное окно внутри .then() при поступлении данных (или в .finally(), как для успешных, так и для ошибочных ответов)

Aleksey Solovey 21.05.2018 15:38

Это потому, что ваш модальный экран открывается перед вашей служебной функцией. Вы можете использовать обещание ИЛИ вы можете открыть `if (response.data! = Null) {$ ('# SomeModal'). Modal ('show');} внутри вашего успеха.

Namdeo Karande 21.05.2018 15:38

Спасибо за проявленный интерес, следует ли мне заменить .then () на .finally () или проверить его синтаксис.

devek om 21.05.2018 15:42
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
0
3
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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, либо в последующий блок прикованный.

Спасибо за интерес, и вся информация выглядит нормально, я постараюсь.

devek om 22.05.2018 08:46

Другие вопросы по теме