Хотите, чтобы функция B дождалась завершения функции A в AngularJS

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

    var result= functionA();
    if(result === true){
     functionB();
    }

Оператор if уже выполняется без получения ответа от функции A и, таким образом, всегда отображается как ложный, даже если он должен быть истинным. Примечание. У функции A есть вызов API, который выполняется с помощью $http.get()


person Tanmay Deshpande    schedule 05.11.2018    source источник


Ответы (2)


Поскольку функция A использует $http.get(), которая возвращает обещание, вы должны связать логику и реализовать свою логику в методе then для возвращенного обещания.

Попробуйте это так

functionA()
.then(function(result){
    if(result === true){
     functionB();
    }
});
person Marcus Höglund    schedule 05.11.2018

В документации для https://docs.angularjs.org/api/ng/service/$http есть несколько хороших идей.

Служба $http — это функция, которая принимает один аргумент — объект конфигурации — который используется для генерации HTTP-запроса и возвращает обещание, которое разрешено (запрос выполнен успешно) или отклонено (запрос не выполнен) с объектом ответа.

$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
  // this callback will be called asynchronously
  // when the response is available
  if (response.result) {
    functionB()
  }
}, function errorCallback(response) {
  // called asynchronously if an error occurs
  // or server returns response with an error status.
});

Или использовать быстрые методы

Также доступны быстрые методы. Все методы быстрого доступа требуют передачи URL-адреса, а данные запроса должны передаваться для запросов POST/PUT. Необязательный конфиг может быть передан в качестве последнего аргумента.

$http.get('/someUrl', config).then(successCallback, errorCallback);
person ksav    schedule 05.11.2018