Supongamos que ahora mismo son las 13:04. Primero, el espacio de 10 minutos es de 1:04 p. m. a 1:14 p. m., la captura de pantalla se tomará en cualquier momento aleatoriamente entre la 1:04 p. m. y la 1:14 p. m. y una vez que lleguemos a la 1:14 p. 14 p. m. a 1:24 p. m. y se toma una captura de pantalla aleatoria entre 1:14 p. m. y 1:24 p. m. ¿Cómo logro esto? Soy un principiante y estoy luchando por construir la lógica requerida.
Quiero hacer cambios en setTimeout para que se ejecute aleatoriamente en cualquier momento en un lapso de 10 minutos, tal como funciona el rastreador de pantalla de Upwork.
Aquí está mi código.
const uploadFiles = (img) => { // logic const storageRef = ref(storage, `/screenshots/${uuidv4()}`); uploadString(storageRef, img, "data_url").then((snapshot) => { console.log("Uploaded a data_url string!"); }); }; let newTimeoutId; const screenshot = async () => { setTimeoutId(true); const newTimeoutId = setTimeout(async () => { const screenshotData = await ipcRenderer.invoke("capture"); const string = new Buffer.from(screenshotData).toString("base64"); const img = `data:image/png;base64,${string}`; console.log(img); uploadFiles(img); screenshot(); }, 600000); }; const stopScreenshot = () => { setTimeoutId(false); clearTimeout(newTimeoutId); };Esto debería dar una idea de una posible forma de lograr lo que se desea:
Ejecute una función/lógica en un momento aleatorio, cada 10 minutos.
Fragmento de código
let stopAt = 15; // for testing, setting a maximum of 15 iterations let maxRandomDelay = 1000; // max 1 second delay for testing // for 10 minutes, make it 10 * 60 * 1000 const resDiv = document.getElementById("rd"); resDiv.innerText = 'display at random intervals: '; const delay = async(ms) => new Promise(res => setTimeout(() => { res(ms); }, ms)); const myTimer = () => { delay(Math.floor(Math.random() * maxRandomDelay)) .then((r) => { resDiv.innerText += `\n..${stopAt} (random-wait: ${r} ms).. `; // instead of the above line, invoke your desired function here }).then(() => { if (stopAt-- > 0) myTimer(); }) }; myTimer(); <div id="rd" />También soy realmente nuevo en js, pero tal vez podrías usar Math.random.
¿algo como esto?:
Matemáticas.piso((Matemáticas.aleatorio() * 600000) + 1);
devuelve un número entre 1 y 600000