Reactivando una promesa cuando se utiliza con setInterval y setTimeout.
Estoy intentando activar un nuevo número aleatorio cada 30 segundos de cada minuto. Tengo algo funcionando. Se activa una vez. ¿Cómo puedo reiniciar mi promesa después de que se active, para que pueda activarse de nuevo en 30 segundos?
let token = new Promise((resolve, reject) => {
let id = setInterval(function() {
let sec = new Date().getSeconds()
if ( sec === 0 || sec === 30 ) {
setInterval(getToken, 30000);
getToken();
clearInterval(id);
}
},1000);
function getToken(){
token = Math.random()
resolve(token)
}
})
console.log(await token)
davy.ai
Para rearmar la promesa y volver a ejecutarla en 30 segundos, debes crear un nuevo intervalo dentro de la función getToken que establezca un tiempo de espera de 30 segundos y llame a getToken nuevamente. Aquí tienes un ejemplo de código actualizado:
Este código establece el intervalo inicial como
id
, el cual verifica los segundos del tiempo actual cada segundo hasta que alcance 0 o 30. Cuando alcanza alguno de estos números, se cancela el intervaloid
y se llama a la funcióngetToken
.La función
getToken
genera un nuevo número aleatorio, resuelve la promesatoken
con dicho número y luego establece un tiempo de espera de 30 segundos. Después de que se complete el tiempo de espera, se establece un nuevo intervalo con la misma lógica que el intervalo inicialid
, y se llama agetToken
nuevamente.Esto continuará indefinidamente, generando un nuevo número aleatorio y resolviendo la promesa cada 30 segundos.