callbacks: ejemplo mundo real lodash - findIndex

26 Febrero 2019 »
javascript
learn from source code

El callback es una función que se pasa como argumento de otra función.

Un ejemplo sencillo sería el siguiente

// funcion hola mundo
function holaMundo(nombre) {
    console.log('Hola ' + nombre);
}

// funcion principal - primer orden
function saludoEstudiantes(nombresEstudiantes, callback) {
    if (nombresEstudiantes.length > 0) {    
        for (let indice = 0; indice < nombresEstudiantes.length; indice++) {
            callback(nombresEstudiantes[indice]);
        }
    }
}

// llamar el saludo usando como parametro una funcion
const nombresEstudiantes = ['Juan', 'Andrea'];
saludoEstudiantes(nombresEstudiantes, holaMundo);

Usualmente los callback tienen dos parametros:

  • error: se refiere a un string que representa el valor del error
  • callback: la función a ejecutar.

El ejemplo anterior quedaría


// funcion hola mundo
function holaMundo(error, nombre) {
    if (error) {
        console.error(error);
        return;
    }
    console.log('Hola' + nombre);
}

// funcion principal - primer orden
function saludoEstudiantes(nombresEstudiantes, callback) {
    if (nombresEstudiantes.length > 0) {    
        for (let indice = 0; indice < nombresEstudiantes.length; indice++) {
            callback(null, nombresEstudiantes[indice]);
        }
    } else {
        callback('Error numero de estudiantes', null);
    }
}

// llamar el saludo usando como parametro una funcion
const nombresEstudiantes = ['Juan', 'Andrea'];
saludoEstudiantes(nombresEstudiantes, holaMundo);

Un ejemplo del mundo real sería: https://github.com/lodash/lodash/blob/master/.internal/baseFindIndex.js El cual tiene de parámetro un predicate: una función que tiene 3 parámetros (objeto, indice, arreglo) pasado a otra función baseFindIndex

// retorna el indice del objeto que tenga de nombre mario
function predicado(objeto) {
    return objecto == 'Mario';
}
const nombres = ['Pablo', 'Mario', 'Ana'];
_.findIndex(nombres, predicado);

Resultado

1

Referencias