Loop em uma chamada a API


Ola,


Tenho um array de ids e para cada id desse array eu preciso realizar uma requisição REST para uma API passando esse id.

Tentei fazer pela plataforma(Builder) e recebi a seguinte mensagem ao tentar publicar o fluxo "Existe um loop no seu fluxo começando no bloco ‘SetDeal’ que não requer entrada de usuário”, no caso eu realmente não vou ter essa interação com o usuário.

Tentei também fazer via script usando tanto o fetch quanto o XMLHttpRequest, porém em nenhum dos casos deu certo e no debug não é mostrado o erro que ocorreu. A função não está errada pois eu testei esses 2 métodos no jsFiddle e ele funciona normalmente.

Portanto gostaria de saber se isso é realmente possível de fazer via script ou se tem alguma maneira mais simples de fazer pelo Builder em que eu não tome esse erro ao tentar publicar.


12 comentários

O Debuger realmente não funcionou em muitos casos que precisei.

Já tentou usar um Try Catch pra retornar o erro na conversa a cada ciclo?

Reputação 7

@Guilherme_Miyamura esse problema está relacionado às condições de saída em algum ponto do seu fluxo e não com a ação (requisição) em si. Isso significa que o Builder entendeu que, em algum momento, há a chance de o usuário ficar em loop. Geralmente acontece quando um bloco não espera entradas de usuário.


Tente dar uma conferida nas condições de saída e veja se isso pode de fato acontecer.

Coloquei um try catch no script todo e na minha função porém não retornou nenhuma mensagem em nenhum dos casos

O problema é que a validação do Builder não leva em conta os resultados que podem levar a outros caminhos, como por exemplo uma requisição ou script.

Ele parece só olhar para o caminho de ligação dos blocos.

Isso impede que a gente crie ciclos entre blocos, pra reutilizá-los e também pra deixar mais organizado o fluxo.

Seria melhor ser somente uma mensagem de aviso, não impeditiva, pois a validação nunca vai saber o que virá nas respostas de requisições ou scripts por exemplo.

Isso acontece muito comigo também…nem o Try Catch funciona…lamentável

Tem algum problema sério nesse Script do Builder pra bugar até mesmo o Try Catch kkkkk

Reputação 7

@Jhoni_Desb manda essa sugestão lá no BLiP Ideas 😉

Vamos lá, vou tentar explicar o fluxo para entender a situação.

tenho o seguinte fluxo:


image


No SetDeal tenho um script que recebe um Array de ids, eu pego o primeiro item desse array e uso esse dado pra fazer a requisição http pra minha API, na condição de saída desse bloco tenho essas situações (se o isSuccess retornar false ele vai pra outro bloco que é o FailSetDeal):


image


Caso a requisição tenha funcionado, ele manda para o bloco VerifySetDeal, nesse bloco existe um script que remove do array o item selecionado no bloco SetDeal para que o mesmo item não seja chamado 2 vezes na chamada HTTP.

A condição de saída desse bloco é a seguinte:

image


É nesse momento que o loop irá acontecer, enquanto existirem itens no array, o bloco SetDeal com a chamada HTTP deve ser executado.

Na teoria isso resolveria meu problema, porém não consigo testar pois o Builder não deixa eu publicar o fluxo.

Se puder me ajudar a resolver essa questão de alguma outra maneira que não estou pensando, eu agradeceria.

Não sei se eu entendi…

Mas não precisa fazer a requisição toda vez.

Faz uma só vez, armazena numa variável e trabalha ela…

Senão terá dados repetidos sempre em toda requisição, exceto os que excluiu, ou decidiu não pedir.

Me parece bem redundante essa manipulação de dados, além de custosa em termos performáticos.

acredito que eu que não expliquei direito, mas a API só aceita um id por requisição, ela não aceita um array de ids. Portanto preciso fazer essa requisição para cada id dentro do array, não tem como fazer só uma vez

Entendi…

Nada performático esse método deles…

Enquanto isso, já sugeri essa melhoria de ignorar o loop lá no BLiP ideias.

Sim… em ultimo caso seria pedir pra eles alterarem os parametros de entrada da API, porém é sempre uma dor de cabeça pedir para alterarem a API, por isso estou tentando resolver essa questão do meu lado primeiro.

@BrunoC consegue me auxiliar nesse caso pelo exemplo que passei?

Comente