Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ajax

Boa noite pessoal, tenho uma função onde faz o calculo de 2 requisições ajax, mas quando essa função e dispara acaba acontecendo que os ajax são síncrono então quando a função via calcular o ajax ainda esta em processo e a variável acaba como undefined. Vou mostrar um exemplo a baixo. Gostaria de saber como faço para que isto não ocorra. Que a função aguarde o resultado.

function ajax1(){

    var xhr = new XMLHttpRequest();

        xhr.open("GET", "https");

        xhr.addEventListener("load", function(){
            var resposta = xhr.responseText;
            var array = JSON.parse(resposta);

            return array.teste;

        });

        xhr.send();  
};

function ajax2(){

    var xhr = new XMLHttpRequest();

        xhr.open("GET", "https");

        xhr.addEventListener("load", function(){
            var resposta = xhr.responseText;
            var array = JSON.parse(resposta);

            return array.teste;

        });

        xhr.send();  
};


function soma(){

    var a = ajax1();
    var b = ajax2();

    var c = a + b;
};
1 resposta
solução!

Olá Fábio,

Se as duas precisam ser chamadas, você pode alterar para que assim que terminar uma ao invés de dar um return, você chama a outra, e quando terminar a outra você chama a função soma, dai você terá garantido que as duas variáveis tenham sido preenchidas.


let  numAjax1,
    numAjax2;

function ajax1(){

    var xhr = new XMLHttpRequest();

    xhr.open("GET", "https");

    xhr.addEventListener("load", function(){
        var resposta = xhr.responseText;
        var array = JSON.parse(resposta);

        numAjax1 = array.teste;

        return ajax2();

        });

        xhr.send();  
};

function ajax2(){

    var xhr = new XMLHttpRequest();

    xhr.open("GET", "https");

    xhr.addEventListener("load", function(){
        var resposta = xhr.responseText;
        var array = JSON.parse(resposta);

        numAjax2 = array.teste;

        return soma();

        });

        xhr.send();  
};

function init() {
    var somatorio = ajax1();
}

function soma(){
    return numAjax1 + numAjax2;
};

Não testei o código, mas seria algo parecido com isso o/