Un callback es una función que se llamará en algún momento al finalizar una tarea.
El primer argumento de un callback por convención es un objeto error, comúnmente conocido como Errback.
Ejecución paralela
Ejemplo:
Crearemos tres archivos de diferente tamaño.
for i in {1..1000}; do echo 'test'; done >> smallFile.txt
for i in {1..10000}; do echo 'test'; done >> mediumFile.txt
for i in {1..100000}; do echo 'test'; done >> bigFile.txt
Desarrollaremos un lector de archivos con ejecución paralela.
const { readFile } = require('fs') // Módulo de gestión de archivos
const Path = require('path') // Módulo para trabajar con rutas de archivos y directorios.
const fileContent = (err, content) => {
if(err){
console.error(err)
return
}
console.log(content.toString()) // Mostramos en pantalla el contenido del archivo
}
readFile(Path.join(__dirname, 'bigFile.txt'), fileContent)
readFile(Path.join(__dirname, 'mediumFile.txt'), fileContent)
readFile(Path.join(__dirname, 'smallFile.txt'), fileContent)
Si observamos el fragmento de código de la línea 12 a 14, primero imprimirá el contenido del archivo smallFile.txt y de último el contenido del archivo bigFile.txt, ya que la ejecución no es en serie, eso quiere decir, que no esperará que finalice de ejecutar la instrucción, si no continuará.
Ejecución serial
Tomaremos como referencia el ejemplo anterior y lo adecuamos para mostrar la ejecución serial:
const { readFile } = require('fs') // Módulo de gestión de archivos
const Path = require('path') // Módulo para trabajar con rutas de archivos y directorios.
const fileContent = (err, content) => {
if(err){
console.error(err)
return
}
console.log(content.toString()) // Mostramos en pantalla el contenido del archivo
}
readFile(Path.join(__dirname, 'smallFile.txt'), (err, content) => {
fileContent(err, content)
readFile(Path.join(__dirname, 'mediumFile.txt'), (err, content) => {
fileContent(err, content)
readFile(Path.join(__dirname, 'bigFile.txt'), fileContent)
})
})