Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

142
Visualizações
Making multiple asynchronous XMLHTTPRequests in Javascript

I have an array of unknown length (anywhere between 1 and 16), and I'd like to send an XMLHTTPRequest for each item in the array asynchronously. Once the final request is complete, I'd like to print data from each response.

However, currently, only the final item's response is being printed. Does anybody know why this is?

Here is my code:

  var responseData = [];
  var numCompletedRequests = 0;

  inputArray.forEach((element) => {

    let newRequest = new XMLHttpRequest();
    newRequest.open("POST", url, true);

    newRequest.onreadystatechange = () => {
      if (newRequest.readyState === 4 && newRequest.status !== 200) {
        // Request failed
        numCompletedRequests++;
        handleFailedRequest(newRequest); // Another function to handle errors

      } else if (newRequest.readyState === 4 && newRequest.status === 200) {
        // Request succeeded
        numCompletedRequests++;
        responseData.push(newRequest.response);
      }

      if (numCompletedRequests === inputArray.length) {
        // This is the last request to come in. Ready to print
        console.log(responseData);
        return;
      }

    newRequest.send(element);
  });

For example, if my input array had 3 elements, the output array responseData would be 3 elements long, but would contain 3 identical elements: the response of whichever request finished last.

Does anybody know why this is, and how I can fix it?

Thanks

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

What about use Promise.All ?

const url1 = "url1"
const url2 = "url2"
const url3 = "url3"

const fetchMultiAsync = async () => {
    const responses = await Prmoise.all([fetch(url1),fetch(url2),fetch(url3)])
    return responses
}

fetchMultiAsync() // return [response of req1, req2, req3]

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda