Pular para o conteúdo principal
CENTRAL DE AJUDA

Como fazer chamadas assíncronas via Custom Javascript

Comentários

1 comentário

  • Guilherme Rodella

    Excelente artigo! Só gostaria de acrescentar comentando como ficaria uma solução parametrizada, que foi o desafio do time aqui...

    Complementando

    Na parte em que temos o comentário:

    // monte a requisição como desejar :)

    Temos que lembrar só do seguinte, se quisermos fazer chamadas dentro de um loop, como, por exemplo, fazer chamadas pra uma operação de paginação, pode ser um problema executar a função imediatamente dentro da function que por sua vez está dentro do new Thread.

     

    A forma que encontramos de superar essa limitação foi de jogar pra um objeto que tem como execução uma função imediatamente invocada (IIFE) e como retorno dela uma new Thread, com isso conseguimos parametrizar as chamadas a serem executas em paralelo, exemplo:

    const threadPoolSize = 8;
    var threadPool = [];
    var retrives = [];

    var jump = 0;
    var page = 0;

    var customHeaders = {
    'Content-Type': 'application/json'
    };

    for (let i=1; i <= threadPoolSize; i++) {
    page = i + jump;
    var o = {
    t: (function(url, page, customHeaders) {
    return new Thread(function() {
    retrives.push($http.get(url + '?offset=' + page, customHeaders));
    });
    })('http://url-com-paginacao', page, customHeaders)
    };
    threadPool.push(o);
    o.t.start();
    }

    Após ter instanciado as 8 Threads e tê-las colocado pra rodar com o método start(), percorremos todas elas e chamamos o método join(), com isto iremos aguardar a execução de todas as Threads até o final.

    exemplo:

    for (let i=0+jump; i < threadPoolSize+jump; i++) {
    threadPool[i].t.join();
    }

    A partir desse momento conseguimos fazer validações e chamar mais 8 páginas, caso tenham mais que 8 páginas, ou se for o caso instanciar e chamar novamente as páginas que deram erros de serem chamadas.

    4

Por favor, entre para comentar.

Powered by Zendesk