es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
Tags:  ,

Answer

  1. Avatar for 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:

    let token = new Promise((resolve, reject) => {
      let id = setInterval(() => {
        let sec = new Date().getSeconds();
        if (sec === 0 || sec === 30) {
          clearInterval(id);
          getToken();
        }
      }, 1000);
    
      function getToken() {
        token = Math.random();
        resolve(token);
        setTimeout(() => {
          id = setInterval(() => {
            let sec = new Date().getSeconds();
            if (sec === 0 || sec === 30) {
              clearInterval(id);
              getToken();
            }
          }, 1000);
        }, 30000);
      }
    });
    
    (async () => {
      console.log(await token);
    })();
    

    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 intervalo id y se llama a la función getToken.

    La función getToken genera un nuevo número aleatorio, resuelve la promesa token 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 inicial id, y se llama a getToken nuevamente.

    Esto continuará indefinidamente, generando un nuevo número aleatorio y resolviendo la promesa cada 30 segundos.

Comments are closed.