Operatori per la gestione degli errori
Gestisca gli errori con catchError e retry.
Operatori per la gestione degli errori è una lezione Angular Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Angular Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Angular Academy include 4 lezioni in totale.
Errori negli observable
Quando un observable emette un errore, si termina: non vengono emessi altri valori e viene eseguito il gestore degli errori. Gli operatori per gli errori consentono di recuperare, riprovare o trasformare gli errori invece di interrompere lo stream.
Il percorso degli errori
Gestisca gli errori nell'observer o con gli operatori. Senza una gestione, un errore non gestito può interrompere la sottoscrizione.
this.http.get('/api/data').subscribe({
next: d => console.log(d),
error: err => console.error('failed', err)
});catchError
catchError intercetta un errore e restituisce un observable sostitutivo, consentendo allo stream di continuare senza interruzioni.
import { catchError, of } from 'rxjs';
this.http.get('/api/data').pipe(
catchError(err => {
console.error(err);
return of([]); // fallback value
})
).subscribe(data => console.log(data));Rilanciare selettivamente
All'interno di catchError può esaminare l'errore e decidere se recuperare o rilanciarlo con throwError.
import { catchError, throwError, of } from 'rxjs';
source$.pipe(
catchError(err =>
err.status === 404 ? of(null) : throwError(() => err)
)
).subscribe();retry
retry(n) crea una nuova sottoscrizione alla sorgente fino a n volte quando si verifica un errore; è utile per gli errori di rete temporanei.
import { retry } from 'rxjs';
this.http.get('/api/flaky').pipe(
retry(2) // try up to 3 times total
).subscribe(d => console.log(d));retry con configurazione
La forma a oggetto aggiunge un ritardo tra i tentativi e supporta una funzione di backoff, evitando di sovraccaricare il server.
this.http.get('/api/flaky').pipe(
retry({ count: 3, delay: 1000 })
).subscribe(d => console.log(d));Backoff nello stile di retryWhen
Per un backoff esponenziale, l'opzione delay può essere una funzione che restituisce un observable con ritardi progressivamente più lunghi a ogni tentativo.
import { timer } from 'rxjs';
source$.pipe(
retry({
delay: (err, count) => timer(count * 1000)
})
).subscribe();catchError dopo retry
Può combinarli: riprovi in caso di errori temporanei, poi ricorra a una soluzione alternativa se i tentativi si esauriscono.
this.http.get('/api/data').pipe(
retry({ count: 2, delay: 500 }),
catchError(() => of([]))
).subscribe(data => console.log(data));La posizione è importante
La posizione di catchError nella pipe ne determina l'ambito. All'interno di uno switchMap intercetta gli errori di ogni richiesta interna, mantenendo attivo lo stream esterno; alla fine intercetta tutti gli errori.
term$.pipe(
switchMap(t => this.http.get('/api?q=' + t).pipe(
catchError(() => of([])) // outer stream survives
))
).subscribe();EMPTY come fallback silenzioso
Restituire EMPTY da catchError completa lo stream senza alcun valore. È utile quando desidera ignorare l'errore senza emettere nulla.
import { EMPTY, catchError } from 'rxjs';
source$.pipe(
catchError(() => EMPTY)
).subscribe();finalize per la pulizia
finalize esegue una callback quando lo stream termina per qualsiasi motivo: completamento, errore o annullamento della sottoscrizione. Lo abbini alla gestione degli errori per reimpostare sempre lo stato di caricamento.
import { finalize, catchError, of } from 'rxjs';
this.loading = true;
source$.pipe(
catchError(() => of([])),
finalize(() => this.loading = false)
).subscribe();Verifica rapida
Verifichi la Sua comprensione della gestione degli errori.
Riepilogo: operatori per la gestione degli errori
Gli errori terminano uno stream se non vengono gestiti.
catchError: recupera l'errore restituendo un observable sostitutivo.retry: crea una nuova sottoscrizione in caso di errore, con ritardo o backoff opzionale.- La posizione, all'interno di switchMap o alla fine, controlla l'ambito.
Ha completato il corso RxJS Operators in Depth.
Impara HTML con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 38
- Lezioni
- 144
Domande Frequenti
La lezione «Operatori per la gestione degli errori» è gratuita?
Sì — il testo completo di «Operatori per la gestione degli errori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Angular Academy, passa a CoddyKit PRO. Il corso Angular Academy include 4 lezioni in totale.
Cosa imparerò in «Operatori per la gestione degli errori»?
Gestisca gli errori con catchError e retry. Eserciti Angular Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Angular Academy?
Non è richiesta alcuna esperienza precedente. Angular Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Operatori per la gestione degli errori»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Angular Academy?
Sì. Ogni lezione Angular Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Operatori di trasformazione
- Operatori di filtraggio
- Operatori di combinazione
- Operatori per la gestione degli errori