Hola @zarelixzana,
Con callback no puedes retornar de la forma tradicional, pues estamos frente a asincronía, las cosas pueden tardar más de lo que parece por lo que esperarlas sería horrible (para el computador). Entonces, usando callbacks tenemos como forma de “retornar” resultados el pasarlos como parámetro del callback :
funcionLenta = (callback)=>{
/*operación lenta*/
callback(resultadoOperación)
}
Entonces cuando quiero usar la función lenta debo escribir un código parecido a este :
funciónLenta((resultado)=>{
/*código que usa el resultado*/
})
Ahora bien, las promesas llegaron a salvarnos de esto, ya que si dependemos de varios de esos resultados de operaciones asíncronas, es muy fácil caer en lo que llamamos “callback hell”, con callbacks dentro de callbacks dentro de callbacks.
La promesa encapsula este comportamiento, tal como tu lo ejemplificaste muy bien en tu código, y ahora los resultados los recibimos a través de la función then.
Te recomiendo entonces que transformes tu código a promesa y que a través de resolve pases los resultados de tu operación, verás que ahora tendrás un modo ordenado de recibir los links que encontraste en los archivos.