Захват возврата метода из другого метода с использованием AngularJS и $ httprequest - PullRequest
0 голосов
/ 08 октября 2018

Я хотел бы задать вопрос, который должен быть простым.Мне нужно захватить значение переменной для передачи в качестве параметра (обязательно) для использования API.Эта переменная является возвращением метода, который является запросом внутри файла JSON, но возвращается как неопределенное.

Следуйте коду:

Функция для поиска идентификатора внутри JSON (с возвратом)

self.getId = function(){   
$http({
        method: 'GET',
        url: self.urlEspecialidades,
        headers: { 'Content-Type': 'application/json' }
}).then(function(resposta) { 
var json = {};
json = resposta.data.data;  

for(var i = 0; i < json.length; i++){
    if(json[i].descricao == self.descricao){
        var id_especialidade = (json[i].id_especialidade); }
    }
    console.log(id_especialidade);
    return id_especialidade;
}) }

Функция для поиска состояния в JSON (с возвратом):

self.getUf = function() {   
$http.get(self.urlEstados,
{
     transformResponse: function (cvt) {
     var x2js = new X2JS();
     var aposCvt = x2js.xml_str2json(cvt);
     return aposCvt; }        

}).then(function(resposta) { 
var json = {};
json = resposta.data.estados.data.item; 

for(var i = 0; i < json.length; i++){
    if(json[i].estado == self.estado){
        var uf = (json[i].uf);
         } 
    }
    console.log(uf);
    return uf;
}) }

Функция для использования API с двумя параметрами:

self.buscaPrestadores = function() {   
var id_parametro = self.getId();
var uf_parametro = self.getUf();

console.log(id);
console.log(uf);

$http({
        method: 'GET',
        url: self.urlPrestadores,
        headers: { 'Content-Type': 'application/json' },
        params: {uf:uf_parametro,id_especialidade:id_parametro}
}).then(function(resposta) { 
     //código vem aqui...
}) }

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

введите описание изображения здесь

1 Ответ

0 голосов
/ 08 октября 2018

Добавьте return перед обещанием, или вы ничего не можете решить

self.getUf = function() {
  <b>return</b> $http.get(...).then(function(resposta) {
    ...
    return uf;
  })
}

Это вернет Обещание , , а не значение uf.
После того, как вы напишите его как

uf_parametro = self.getUf()

, вам необходимо разрешать uf_parametro как обещание каждый раз, когда вам нужно извлечь из него значение uf, например:

uf_parametro.then(function(uf){ console.log(uf); })

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

$q.all([id_parametro, uf_parametro]).then(function(res){ console.log(res); })
...