Las funciones callback son funciones que se pasan como argumentos. Este patrón de programación crea una secuencia de llamadas a funciones tanto en programación síncrona como asíncrona. Escribir una función callback no es distinto de escribir una función; sin embargo, la función callback debe coincidir con la signatura que define la función que la llama.
const squareLength = 5;
// Caller function takes a callback function
function applyToSquare(callback) {
return callback(squareLength);
}
// Callback must expect the possible argument from the calling function
function areaOfSquare(number) {
return number * number;
}
applyToSquare(areaOfSquare); // => 25
También puedes escribir las funciones callback como una expresión de función, una expresión de función anónima o una expresión de función flecha:
applyToSquare(function squarePerimeter(side) {
return side * 4;
});
applyToSquare(function (side) {
return side * 4;
});
applyToSquare((side) => {
return side * 4;
});
Estás creando un nuevo portal en línea para que tus clientes pidan su fruta fresca directamente al frutero. El frutero tiene una API que puedes usar para comprobar si dispone de las existencias que desean tus clientes. Necesitas crear una pequeña biblioteca de funciones para interactuar con la API del frutero.
El portal debe avisar a tu cliente si su pedido se ha realizado correctamente.
Define la función callback onSuccess, que se llamará si el pedido se ha realizado correctamente porque el frutero tiene suficiente fruta en existencias.
Esta función debe invocar la función notify importada, pasándole { message: 'SUCCESS' } para que tu cliente sepa que su pedido se ha realizado correctamente.
onSuccess();
// => `notify` called with `{ message: 'SUCCESS' }`
El portal debe avisar a tu cliente si su pedido no se ha podido realizar.
Define la función callback onError, que se llamará si el pedido no se ha podido realizar porque el frutero no tiene la fruta en existencias o porque se ha producido un error.
Esta función debe invocar la función notify importada, pasándole { message: 'ERROR' } para que tu cliente sepa que su pedido no se ha podido realizar.
onError();
// => `notify` called with `{ message: 'ERROR' }`
Los pedidos de fruta se realizan a través de la API del frutero mediante la función order proporcionada.
Esta función recibe tres argumentos: una query, que contiene la variety y la quantity de fruta solicitada, una función callback que se invocará si el pedido se realiza correctamente, y otra función callback que se invocará si el pedido encuentra un error.
Quieres aislar tu base de código de posibles cambios externos y decides envolver la llamada a la función order dentro de una nueva función llamada orderFromGrocer.
Implementa la función orderFromGrocer, que intenta realizar un pedido mediante una llamada a la función order de la API del frutero, asegurándote de reenviar a la llamada de la API los argumentos que se pasan a orderFromGrocer.
La query tiene la forma de un objeto:
const query = {
variety: string,
quantity: number,
};
orderFromGrocer(
{ variety: 'pear', quantity: 12 },
exampleSuccessCallback,
exampleErrorCallback,
);
// => `order` was called with the query and the callbacks
Tus clientes ya pueden realizar pedidos de fruta a través de tu portal; sin embargo, te das cuenta de que invocas la función orderFromGrocer en muchos sitios distintos de tu base de código, y cada vez tienes que pasarle una query y las dos funciones callback como argumentos.
Al ver una oportunidad para refactorizar tu código, piensas que sería más sencillo si pudieras realizar un pedido pasando solo la variety y la quantity de fruta que se necesita.
Define la función auxiliar postOrder, que recibe variety y quantity como argumentos e intenta realizar un pedido al frutero.
postOrder('peach', 100);
// => order placed for 100 peaches
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.