En aquest tema, explorarem el concepte de callbacks en JavaScript, una tècnica fonamental per gestionar operacions asíncrones. Aprendrem què són els callbacks, com utilitzar-los i veurem exemples pràctics per entendre millor el seu funcionament.
Què és un Callback?
Un callback és una funció que es passa com a argument a una altra funció i que s'executa després que aquesta funció hagi completat la seva tasca. Els callbacks són especialment útils per gestionar operacions asíncrones, com ara sol·licituds HTTP, temporitzadors i esdeveniments.
Característiques Clau dels Callbacks:
- Asíncronia: Permeten executar codi després que una operació asíncrona hagi finalitzat.
- Flexibilitat: Poden ser reutilitzats en diferents parts del codi.
- Control de Flux: Faciliten la gestió del flux de dades en aplicacions asíncrones.
Exemple Bàsic de Callback
Vegem un exemple senzill per entendre com funcionen els callbacks:
function saludar(nom, callback) {
console.log('Hola, ' + nom + '!');
callback();
}
function despedir() {
console.log('Adéu!');
}
saludar('Anna', despedir);Explicació del Codi:
- Funció
saludar: Accepta un nom i una funció callback com a arguments. Primer, imprimeix un missatge de salutació i després crida la funció callback. - Funció
despedir: Simplement imprimeix un missatge de comiat. - Crida a
saludar: Es passa el nom 'Anna' i la funciódespedircom a arguments. Després de saludar, es crida la funciódespedir.
Callbacks en Operacions Asíncrones
Els callbacks són molt comuns en operacions asíncrones com les sol·licituds HTTP. Vegem un exemple amb setTimeout, una funció que executa un codi després d'un cert temps:
console.log('Inici');
setTimeout(function() {
console.log('Aquest missatge apareix després de 2 segons');
}, 2000);
console.log('Final');Explicació del Codi:
console.log('Inici'): Imprimeix 'Inici' immediatament.setTimeout: Configura un temporitzador de 2 segons. Després d'aquest temps, executa la funció callback que imprimeix un missatge.console.log('Final'): Imprimeix 'Final' immediatament després de configurar el temporitzador.
Error Handling amb Callbacks
És important gestionar els errors quan es treballa amb callbacks. Vegem un exemple de com fer-ho:
function llegirFitxer(nomFitxer, callback) {
// Simulació de lectura de fitxer
setTimeout(function() {
if (nomFitxer === 'existent.txt') {
callback(null, 'Contingut del fitxer');
} else {
callback('Error: Fitxer no trobat');
}
}, 1000);
}
llegirFitxer('existent.txt', function(error, contingut) {
if (error) {
console.error(error);
} else {
console.log(contingut);
}
});Explicació del Codi:
- Funció
llegirFitxer: Simula la lectura d'un fitxer. Després d'un segon, crida el callback amb un error o el contingut del fitxer. - Crida a
llegirFitxer: Es passa el nom del fitxer i una funció callback que gestiona l'error o imprimeix el contingut.
Exercicis Pràctics
Exercici 1: Temporitzador amb Callback
Crea una funció temporitzador que accepti un temps en mil·lisegons i un callback. La funció ha d'executar el callback després del temps especificat.
function temporitzador(temps, callback) {
setTimeout(callback, temps);
}
// Prova la funció
temporitzador(3000, function() {
console.log('Han passat 3 segons');
});Exercici 2: Sol·licitud Asíncrona Simulada
Crea una funció solicitudAsincrona que accepti una URL i un callback. La funció ha de simular una sol·licitud HTTP i cridar el callback amb un error o una resposta després de 2 segons.
function solicitudAsincrona(url, callback) {
setTimeout(function() {
if (url === 'https://api.exemple.com') {
callback(null, { data: 'Resposta de l\'API' });
} else {
callback('Error: URL no vàlida');
}
}, 2000);
}
// Prova la funció
solicitudAsincrona('https://api.exemple.com', function(error, resposta) {
if (error) {
console.error(error);
} else {
console.log(resposta);
}
});Resum
En aquesta secció, hem après què són els callbacks i com utilitzar-los per gestionar operacions asíncrones en JavaScript. Hem vist exemples pràctics i hem practicat amb exercicis per reforçar els conceptes apresos. Els callbacks són una eina poderosa per controlar el flux de dades en aplicacions asíncrones, i comprendre'ls és essencial per convertir-se en un desenvolupador JavaScript eficient.
JavaScript: De Principiant a Avançat
Mòdul 1: Introducció a JavaScript
- Què és JavaScript?
- Configuració del Teu Entorn de Desenvolupament
- El Teu Primer Programa en JavaScript
- Sintaxi i Conceptes Bàsics de JavaScript
- Variables i Tipus de Dades
- Operadors Bàsics
Mòdul 2: Estructures de Control
- Declaracions Condicionals
- Bucles: for, while, do-while
- Declaracions Switch
- Gestió d'Errors amb try-catch
Mòdul 3: Funcions
- Definició i Crida de Funcions
- Expressions de Funció i Funcions Fletxa
- Paràmetres i Valors de Retorn
- Àmbit i Tancaments
- Funcions d'Ordre Superior
Mòdul 4: Objectes i Arrays
- Introducció als Objectes
- Mètodes d'Objecte i Paraula Clau 'this'
- Arrays: Conceptes Bàsics i Mètodes
- Iteració sobre Arrays
- Desestructuració d'Arrays
Mòdul 5: Objectes i Funcions Avançades
- Prototips i Herència
- Classes i Programació Orientada a Objectes
- Mòduls i Importació/Exportació
- JavaScript Asíncron: Callbacks
- Promeses i Async/Await
Mòdul 6: El Model d'Objectes del Document (DOM)
- Introducció al DOM
- Selecció i Manipulació d'Elements del DOM
- Gestió d'Esdeveniments
- Creació i Eliminació d'Elements del DOM
- Gestió i Validació de Formularis
Mòdul 7: APIs del Navegador i Temes Avançats
- Emmagatzematge Local i de Sessió
- Fetch API i AJAX
- WebSockets
- Service Workers i Aplicacions Web Progressives (PWAs)
- Introducció a WebAssembly
Mòdul 8: Proves i Depuració
- Depuració de JavaScript
- Proves Unitàries amb Jest
- Proves d'Integració
- Proves de Cap a Cap amb Cypress
Mòdul 9: Rendiment i Optimització
- Optimització del Rendiment de JavaScript
- Gestió de Memòria
- Manipulació Eficient del DOM
- Càrrega Per Mandat i Divisió de Codi
Mòdul 10: Frameworks i Llibreries de JavaScript
- Introducció a React
- Gestió d'Estat amb Redux
- Conceptes Bàsics de Vue.js
- Conceptes Bàsics d'Angular
- Triar el Framework Adequat
