Hola, actualmente estoy rastreando la carga de un archivo (mientras se comprime) y enviando el progreso al usuario a través de la GUI. Mi código es algo feo. ¿Se pregunta si ustedes podrían tener una mejor manera?
Los valores booleanos a continuación están destinados a evitar actualizaciones constantes, ya que solo quiero actualizar en ciertos 'puntos de control'. (en este caso a continuación, 25%, 50% y 75%).
let past25 = false; let past50 = false; let past75 = false; ffmpeg(file.path) .addOption('-hls_time', 10) .addOption('-hls_list_size', 0) .addOption('-f', 'hls') .on('progress', (progress) => { let sendUpdate = false; if (progress.percent > 25 && past25 == false) { sendUpdate = past25 = true; } else if (progress.percent > 50 && past50 == false) { sendUpdate = past25 = past50 = true; } else if (progress.percent > 75 && past75 == false) { sendUpdate = past25 = past50 = past75 = true; } if (sendUpdate) { notifyUser(progress) } })Tal vez establezca un umbral inicial y un incremento y luego use una sola verificación. También le permite cambiar la granularidad de sus actualizaciones simplemente cambiando los valores.
let threshold = 25; let increment = 25; ffmpeg(file.path) .addOption('-hls_time', 10) .addOption('-hls_list_size', 0) .addOption('-f', 'hls') .on('progress', (progress) => { if (progress.percent > threshold) { notifyUser(progress); // account for skipping multiple 'checkpoints' by rounding to the next highest threshold threshold += Math.ceil((progress.percent - threshold) / increment) * increment; } });