Como fazer chamadas assíncronas via Custom Javascript

Muitas vezes nos deparamos com situações em que a montagem da requisição é muito trabalhosa, sendo necessário montá-la através do Interceptor customizado Javascript ao invés do uso do Internal API Call ou Service Callout. Além da complexidade da requisição, muitas vezes não é necessário esperarmos a resposta dela para continuar a requisição original. Para tanto, nesse artigo explicaremos como fazer chamadas assíncronas no customJS (Rhino):

 

Inicialmente, consideraremos:

  • "chamada principal" a chamada realizada para um recurso de uma API. Exemplo: GET /carros
  • Consideraremos "chamada JS" a chamada realizada através do custom JS que queremos que seja assíncrona.


Para realizar uma chamada http assíncrona no custom javascript (chamado JS) é necessário iniciar uma Thread nova, como no exemplo abaixo:

var Thread = java.lang.Thread;

new Thread(function () {
   // chamada assíncrona visto que executa em outra thread
// monte a requisição como desejar :)   
    $http.get("http://supermock.demo.sensedia.com/?sleep=20"); // demorará 20s porém esse tempo não será esperado para continuar o fluxo da chamada Principal
}).start();

$call.tracer.trace("Thread started with http request", "OK");

A Thread nova conterá a lógica da requisição, evitando que a Thread "principal" do algoritmo fique esperando a resposta da mesma. Nesse sentido, a Thread responsável pela chamada JS será executada em paralelo a Thread principal, fazendo com que a chamada principal continue seu fluxo normalmente, independente do tempo de resposta da chamada JS. 

​Vale a pena destacar no snippet de código acima a utilização da linha abaixo, a qual ajuda-nos a não ter que adicionar o pacote da classe toda vez que temos que utilizá-la:

var Thread = java.lang.Thread;

// referência a java.lang.Thread pode ser Thread por conta da linha acima.
// var Thread = new Thread(...);

 

Conclusão

Em essência, podemos adicionar qualquer lógica na Thread nova (alguma regra de negócio envolvida por exemplo), não se limitando apenas a chamadas assíncronas. Vale a criatividade e necessidade da implementação para tal.

Tem mais dúvidas? Envie uma solicitação

Comentários

Desenvolvido por Zendesk