Function in javascript always returns undefined

0

I know there are several similar questions, but none of the solutions worked out: (

I have this function that receives data by parameter:

function funcao(valor) {
    var a;
    $.getJSON(/* aqui retorno de uma WebService*/, function (dados) {
        if ("error" in dados) {
            a = 0; //seria o true e false, mas não funcionaram também
            return a;
        } else {
            /* se o WS está ok faz algo e então seria true */
            a = 1;
            return a;
        }
    });
}

I've already tried to treat return with

return true;
return 1;
return "true";
return 'true';
return a.val();
return a.value;
return a;
return !!a;

This in turn is used as follows:

function valida(){
    if(funcao(dados)){
        faz algo
    } else if(funcao(dados)){
        algo
    }else{
        algo
    }
}

I've tried to handle if with

if(func(dados)){}
if(func(dados) == true){}
if(func(dados) === true){}
if(func(dados) == 1){}
if(func(dados) === 1){}
if(func(dados) === "1"){} //a parte de == ou === tentei também e vale para os demais
if(func(dados) === "true"){}
if(func(dados) === 'true'){}
if(func(dados).val()){}
if(func(dados).value){}
if(func(dados).value === true){}
if(func(dados).val() === true){}

All these attempts returned value undefined

I have read a lot of questions here from the stack itself and from other places, but all possible solutions did not work.

Thanks for the help!

    
asked by anonymous 18.02.2018 / 00:33

1 answer

0

This does not work this way because Ajax is asynchronous , that is, when you call the function that in turn calls the other function expecting to receive an Ajax value, it immediately returns undefined because the Ajax return is not immediate.

What you can do is use .then which processes the code after Ajax returns. You also need to pass a parameter in the valida(dados) function, where dados is the value that will be sent to the funcao(valor) function.

Here's how it would look:

function valida(dados){

   funcao(dados).then(function(retorno){
      if(retorno){
         faz algo
      } else if(!retorno){
         faz algo
      }else{
         faz algo
      }
   });

}

function funcao(valor) {
    return $.getJSON(/* aqui retorno de uma WebService*/).then(function (dados) {
        if ("error" in dados) {
            return false;
        } else {
            /* se o WS está ok faz algo e então seria true */
            return true;
        }

    });
}

valida("algum valor"); // aqui chama a função
    
18.02.2018 / 01:26