Búsqueda de sitios web

Bucle de JavaScript/TypeScript exactamente cada minuto


Mi código se ve así:

 async run(minutesToRun: number): Promise<void> {
    await authenticate();
    await this.stock.fillArray();
    await subscribeToInstrument(this, this.orderBookId);
    await subscribeToOrderbook(this, this.orderBookId);
    await this.updateLoop(minutesToRun);
}

sleep(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
}

async updateLoop(minutesToRun: number) {
    const startTime = new Date();
    const timeDiff = compareTimestamps(startTime, this.currentTime);
    while (timeDiff < minutesToRun) {
        console.log(timeDiff);
        this.currentTime = new Date();
        this.timeStampArray.push(this.currentTime);
        console.log(this.timeStampArray);
        await this.stock.updateData();
        await this.sleep(60000);
    }
}

sin embargo, no es importante para mí que los datos se actualicen antes de que cualquier otra función los ejecute; lo que es más importante es que la llamada a updateData ocurra exactamente cada minuto, ya que necesito analizar los datos basándome en un intervalo consistente. Ahora fluctúa entre 1 m 100 ms y 1 m 300 ms. ¿Hay alguna manera de asegurarse de que sea así, incluso si otras funciones se ejecutan entre medio?

Respuesta #1

setInterval y setTimeout no son la manera más precisa de programar una tarea, porque se ejecutan en el hilo principal, que comparte tiempo de CPU con otros procesos. Si quieres más precisión, entonces tendrás que ejecutar tus temporizadores en un WebWorker, que ejecuta código en un hilo separado.

Respuesta #2

Existe una función de javascript llamada setInterval(function() {}, timeInMilliseconds) para hacer esto: aquí.