Estoy escribiendo una aplicación de JavaScript para simular un proceso de descarga de documentos en la automatización web. La página para interactuar tiene una lista paginada de personas como se muestra en la captura de pantalla a continuación. Al hacer clic en el nombre de la persona, se descargará el documento de esta persona.
El proceso de automatización descarga el documento de cada persona, luego pasa a la siguiente página y continúa con la descarga de la misma manera.
Me gustaría (1) un retraso de 2 segundos entre cada descarga y (2) un retraso de 2 segundos después de acceder a una nueva página y antes de la primera descarga.
Después de algunas investigaciones, se me ocurrió lo siguiente. Está muy cerca de lo que quiero, excepto que ejecuta la descarga inmediatamente después de aterrizar en la página siguiente. ¿Alguna idea sobre cómo puedo modificarlo para obtener más de 2 segundos de retraso entre el aterrizaje en una nueva página paginada y la primera descarga?
function downloadDoc(x) { console.log("Downloading doc ", x); } function goToPage(p) { for(let i=0; i<5; i++) { setTimeout(downloadDoc, i*2000, i); } console.log("Go to page ", p); } for(let i=0; i<5; i++) { setTimeout(downloadDoc, i*2000, i); } for (let p = 2; p< 5; p++) { setTimeout(goToPage, p * 12000, p); }ACTUALIZACIÓN: resuelto siguiendo la respuesta proporcionada por @jonas-wilms en https://stackoverflow.com/a/44476626/97109
async function downloadDoc(x) { await timer (1000); console.log("Downloading doc ", x); } async function goToPage(p) { await timer(2000); console.log("Go to page ", p); } async function task(i) { // 3 await timer(1000); //console.log(` ${i} done!`); downloadDoc(i); } async function main() { for(let i = 0; i < 8; i++) { await goToPage(i); for(let j = 0; j < 5; j++) { await task(j); if (j === 4) { await timer(2000); } } } } main(); function timer(ms) { return new Promise(res => setTimeout(res, ms)); }