¿Puede alguien explicarme por qué la siguiente función regresa antes de que finalice retrieve_s3_file()?
El cliente no recibe datos de response.send a continuación. Los datos devueltos por retrieve_s3_file() son correctos (según la salida de la consola), pero primero se envía una respuesta sin datos al cliente.
app.post("/getJobStatus", function(request, response){ var guid = request.body.job_id; var to_do_list = []; var data_list = []; var completed_list = []; axios.get(job_queue_url + "/list?guid=" + guid) .then(function (res){ console.log("Response from API gateway : "); console.log(res.data); files = res.data; for (let i = 0; i < files.length; i++) { if (files[i] in completed_list) {continue} else { to_do_list.push(files[i]); completed_list.push(files[i]); } } response.send(retrieve_s3_file(to_do_list, guid)); }) .catch(function (error){ console.log(error); });Si retrieve_s3_files es asincrónico , deberá esperar a que se resuelva la promesa antes de poder usar el valor. Puedes cambiar esa última línea a algo como esto:
retrieve_s3_file(to_do_list, guid).then(val => { response.send(val); }).catch(error => { console.log(error) }); He agregado el método .catch para que pueda manejar cualquier error que ocurra mientras interactúa con s3.