Estoy tratando de entender más sobre cómo funcionan las funciones de devolución de llamada en JavaScript.
Encontré este código de ejemplo simple en línea y después de agregar las importaciones y el archivo txt adicional, está funcionando. Sin embargo, no estoy seguro de por qué funciona, ya que los parámetros de las funciones no se definen en ninguna parte.
fs.readFile(`${__dirname}/temp.txt`, (err, data) => { console.log(`Breed: ${data}`); superagent.get(`https://dog.ceo/api/breed/${data}/images/random`).end((err,res) =>{ console.log(res.body) }); }) Al ejecutar esto, obtengo el resultado esperado en la consola con la línea que muestra Breed: ${data} y la siguiente línea que muestra el cuerpo de la res .
Sin embargo, los parámetros data err nunca se proporcionaron a la función de flecha dentro de readFile. Los parámetros err , res nunca han sido llamados/proporcionados un valor para mostrar un mensaje a la consola, entonces, ¿cómo muestran estas líneas un mensaje a la consola?
Podría haber entendido que esto funcionaba si .readFile devolviera un err y un valor de data y .end devolviera un err y un valor de res , sin embargo, al leer la documentación, ambas funciones devuelven void , por lo que estoy confundido y agradecería la ayuda.
Pasa una función a readFile, y más tarde readFile llamará a su función. Cuando llame a su función, readFile pasará los valores relevantes.
Puedes hacer algo similar tú mismo, como esto:
function myReadFile(filename, callback) { setTimeout(() => { if (Math.random() > 0.5) { callback(null, 'fake file'); } else { callback('an error', null); } }, 1000); } myReadFile(`${__dirname}/temp.txt`, (err, data) => { console.log(`Breed: ${data}`); })(aunque, por supuesto, la función readFile real no está haciendo tiempos de espera o números aleatorios, sino leyendo de un archivo y escuchando que la operación tenga éxito o falle)