Olá senhores,
Eu não sei se esse é o local mais apropriado para perguntar isso, mas é que já faz vários dias que estou pesquisando e tentando encontrar uma solução e não sei mais o que fazer. Meu problema é o seguinte eu preciso fazer uma requisição para o backend a cada um minuto, a princípio me parecia uma tarefa simples, então eu criei o seguinte código:
this.ping().pipe(
repeatWhen(() => interval(60000)), takeUntil(this.ping$)
).subscribe();
O método this.ping() monta o Observable da requisição com HttpClient e não tem nada demais e o this.ping$ é apenas um Subject que eu faço um this.ping$.next(true) quando ocorre um erro de autenticação ou o usuário faz logout do sistema parando a execução dessa lógica. O grande problema desse código é que o intervalo aparentemente não é executado a cada 1 minuto caso a main thread do javascript esteja fazendo um processamento pesado, pelo que eu andei lendo o javascript é single thread e da prioridade para executar todas as tarefas síncronas, antes de começar a executar as tarefas assíncronas. Tentei fazer o uso de web workers colocando a lógica acima em um web worker, mas parece que quando acontece um processamento pesado na main thread o intervalo definido no web worker também varia e não é constante (talvez eu tenha feito algo de errado). É possível criar um intervalo para executar uma requisição de 1 em 1 minuto de maneira que esse tempo não varie, independente do quão pesado seja o processamento que está sendo executado na main thread?