Timer assíncrono no angular

Olá pessoal,

Quero solicitar uma ajuda para uma implementação front-end em angular 8 conforme a descrição abaixo:

Preciso implementar a um modal a ser aberto para o usuário assim que ele faz o login. Nesse modal ele poderá aceitar ou não os termos da aplicação. Até aqui td certo. Porém se ele não aceitar os termos preciso criar um mecanismo tipo um timmer para contar 5 minutos e subir o modal novamente. Entendo que esse mecanisco deveria ser assincrono e estar em um módulo principal (main) do angular porque o usuário decorrido os 5 min pode estar navegando em qualquer tela da aplicação.

Alguma ideia ?

Desde já agradeço.

Você pode utilizar um setInterval para chamar a função a cada 5 minutos, ou um setTimeout para só chamar uma única vez:

setInterval(() => console.log('Chama a função de 5 em 5 minutos...'), 300000)
setTimeout(() => console.log('Chama a função em 5 minutos...'), 300000)

Opa Lucas muito obrigado pelo retorno. Mais uma dúvida é que caso o usuário não aceite de primeira os termos de utilização ele continuará navegando por qualquer tela da aplicação, usando os roteamentos para as respectivas urls. Dessa forma essa função pode ser implementada em um módulo centralizado de forma que em qualquer ponto que ele esteja da aplicação eu por meio desse modulo centralizado chamo a funcão novamente ao finalizar o timmer ?

Exatamente, criei um novo componente para ficar fazendo essa validação e importe ele no seu componente principal. Assim de qualquer lugar da sua aplicação ele estará sempre rodando.

Maravilha então vou codar aqui e tentar por em prática. obrigado. Abraço.

1 curtida

Nesse caso, eu utilizaria o rxjs por ser algo padrao do angular:

import { interval } from 'rxjs';

const subscription = interval(3000).subscribe(() => {
  console.log('Chama a função em 5 minutos...');
});

// com a subscription, vc consegue cancelar o interval
// subscription.unsubscribe()

Docs: Rxjs - interval

Opa Lucas Camara, obrigado pela dica. Vou considerar esse teste.