Introducció
En aquest tema, aprendrem sobre async
i await
, dues característiques fonamentals de JavaScript i TypeScript que faciliten la gestió de codi asíncron. Aquestes característiques permeten escriure codi asíncron de manera més clara i llegible, semblant al codi síncron.
Què és async
i await
?
async
: La paraula clauasync
s'utilitza per declarar una funció asíncrona. Una funció asíncrona retorna una promesa.await
: La paraula clauawait
s'utilitza dins d'una funció asíncrona per esperar que una promesa es resolgui. Pausa l'execució de la funció fins que la promesa es resol o es rebutja.
Exemple Bàsic
Vegem un exemple bàsic per entendre com funcionen async
i await
:
function delay(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } async function example() { console.log('Inici'); await delay(2000); // Espera 2 segons console.log('Final'); } example();
Explicació del Codi
- Funció
delay
: Aquesta funció retorna una promesa que es resol després d'un retard especificat en mil·lisegons. - Funció
example
: Aquesta és una funció asíncrona que utilitzaawait
per esperar que la promesa retornada perdelay
es resolgui abans de continuar amb l'execució.
Avantatges de async
/await
- Llegibilitat: El codi asíncron escrit amb
async
/await
és més fàcil de llegir i entendre que el codi basat en promeses. - Depuració: És més fàcil depurar codi asíncron amb
async
/await
perquè les traces d'error són més clares i semblen més a codi síncron.
Exemple Pràctic: Crida a una API
Vegem un exemple pràctic on fem una crida a una API utilitzant async
/await
:
interface User { id: number; name: string; username: string; email: string; } async function fetchUser(userId: number): Promise<User> { const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`); if (!response.ok) { throw new Error('Error en la crida a l\'API'); } const user: User = await response.json(); return user; } async function displayUser(userId: number) { try { const user = await fetchUser(userId); console.log(`Nom: ${user.name}`); console.log(`Email: ${user.email}`); } catch (error) { console.error('Error:', error); } } displayUser(1);
Explicació del Codi
- Interfície
User
: Defineix l'estructura de l'objecte usuari. - Funció
fetchUser
: Aquesta funció asíncrona fa una crida a l'API per obtenir les dades d'un usuari i retorna una promesa que es resol amb l'objecte usuari. - Funció
displayUser
: Aquesta funció asíncrona utilitzafetchUser
per obtenir les dades de l'usuari i les mostra per consola. També gestiona els errors amb un bloctry/catch
.
Exercicis Pràctics
Exercici 1: Retard amb async
/await
Crea una funció asíncrona que esperi 3 segons abans de mostrar un missatge per consola.
Solució
async function waitAndLog() { await delay(3000); console.log('Han passat 3 segons'); } waitAndLog();
Exercici 2: Crida a una API amb Gestió d'Errors
Modifica la funció fetchUser
per gestionar errors de xarxa i mostrar un missatge d'error adequat.
Solució
async function fetchUser(userId: number): Promise<User> { try { const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`); if (!response.ok) { throw new Error('Error en la crida a l\'API'); } const user: User = await response.json(); return user; } catch (error) { console.error('Error de xarxa:', error); throw error; } }
Conclusió
En aquest tema, hem après com utilitzar async
i await
per gestionar codi asíncron de manera més clara i llegible. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Ara estem preparats per aplicar aquests coneixements en projectes reals i gestionar codi asíncron de manera eficient.
Curs de TypeScript
Mòdul 1: Introducció a TypeScript
- Què és TypeScript?
- Configuració de l'entorn de TypeScript
- Tipus bàsics
- Anotacions de tipus
- Compilació de TypeScript
Mòdul 2: Treballant amb Tipus
Mòdul 3: Tipus Avançats
Mòdul 4: Funcions i Mòduls
- Tipus de Funció
- Paràmetres Opcional i per Defecte
- Paràmetres Rest
- Mòduls i Espais de Noms
- Decoradors
Mòdul 5: Programació Asíncrona
Mòdul 6: Eines i Millors Pràctiques
- Linting i Formatació
- Proves de Codi TypeScript
- TypeScript amb Webpack
- TypeScript amb React
- Millors Pràctiques