Che cos’è un errore nella programmazione?
Le cose non vanno sempre bene nei nostri programmi.
In particolare, ci sono situazioni in cui potremmo voler interrompere il programma o informare l’utente se succede qualcosa di brutto.
Ad esempio:
- il programma ha cercato di aprire un file inesistente.
- la connessione di rete è interrotta.
- l’utente ha inserito un input non valido.,
In tutti questi casi noi come programmatori, creiamo errori, o lasciamo che il motore di programmazione ne crei alcuni per noi.
Dopo aver creato l’errore possiamo informare l’utente con un messaggio, oppure possiamo interrompere del tutto l’esecuzione.
Che cos’è un errore in JavaScript?
Un errore in JavaScript è un oggetto, che viene successivamente lanciato per arrestare il programma.
Per creare un nuovo errore in JavaScript chiamiamo la funzione di costruzione appropriata., Per esempio, per creare un nuovo messaggio di errore generico che possiamo fare:
const err = new Error("Something bad happened!");
Quando si crea un oggetto di errore, è possibile omettere il new
parola chiave:
const err = Error("Something bad happened!");
una Volta creato, l’errore in oggetto presenta tre caratteristiche:
-
message
: una stringa con il messaggio di errore. -
name
: il tipo di errore. -
stack
: una traccia di stack di esecuzione delle funzioni.,
Per esempio, se si crea un nuovo TypeError
oggetto con il messaggio appropriato, il message
porterà l’attuale stringa di errore, mentre name
sarà "TypeError"
:
Firefox implementa anche un gruppo di non-standard di proprietà come columnNumber
filename
e lineNumber
.,
Many types of errors in JavaScript
There are many types of errors in JavaScript, namely:
Error
EvalError
InternalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
Remember, all these error types are actual constructor functions meant to return a new error object.,
Nel tuo codice userai principalmente Error
e TypeError
, due dei tipi più comuni, per creare il tuo oggetto error.
La maggior parte delle volte, la maggior parte degli errori verrà direttamente dal motore JavaScript, come InternalError
o SyntaxError
.,
va x = '33';// SyntaxError: Unexpected identifier
O quando si utilizzano le parole chiave riservate in posti sbagliati, come await
al di fuori di un async
funzione:
function wrong(){ await 99;}wrong();// SyntaxError: await is only valid in async function
un Altro esempio di TypeError
si verifica quando si seleziona inesistenti gli elementi HTML della pagina:
Uncaught TypeError: button is null
In aggiunta a questi tradizionali oggetti di errore, un AggregateError
oggetto sta per terra presto in JavaScript., AggregateError
è conveniente per il wrapping di più errori insieme, come vedremo più avanti.
Oltre a questi errori incorporati, nel browser possiamo trovare anche:
-
DOMException
. -
DOMError
, deprecato e non più utilizzato oggi.
DOMException
è una famiglia di errori relativi alle API Web., Essi sono gettati quando facciamo cose stupide nel browser, come:
document.body.appendChild(document.cloneNode(true));
Il risultato:
Uncaught DOMException: Node.appendChild: May not add a Document as a child
Per un elenco completo, vedere questa pagina su MDN.
Che cos’è un’eccezione?
La maggior parte degli sviluppatori pensa che l’errore e le eccezioni siano la stessa cosa. In realtà, un oggetto error diventa un’eccezione solo quando viene lanciato.,
Per lanciare un’eccezione in JavaScript si usa throw
, seguito da l’errore in oggetto:
const wrongType = TypeError("Wrong type given, expected number");throw wrongType;
La forma breve è più comune nella maggior parte delle basi di codice si trova:
throw TypeError("Wrong type given, expected number");
o
throw new TypeError("Wrong type given, expected number");
È improbabile per generare eccezioni al di fuori di una funzione o di un blocco condizionale. Invece, considera il seguente esempio:
Qui controlliamo se l’argomento della funzione è una stringa., Se non lo è, lanciamo un’eccezione.
Tecnicamente, puoi lanciare qualsiasi cosa in JavaScript, non solo oggetti error:
throw Symbol();throw 33;throw "Error!";throw null;
Tuttavia, è meglio evitare queste cose: lanciare sempre oggetti error corretti, non primitive.
In questo modo si mantiene la gestione degli errori coerente attraverso la base di codice. Altri membri del team possono sempre aspettarsi di accedere aerror.message
oerror.stack
sull’oggetto error.
Cosa succede quando lanciamo un’eccezione?,
Le eccezioni sono come un ascensore che sale: una volta lanciato uno, bolle nello stack del programma, a meno che non venga catturato da qualche parte.
Si consideri il seguente codice:
Se si esegue questo codice in un browser o nel nodo.js, il programma si ferma e segnala l’errore:
Inoltre, è possibile vedere la riga esatta in cui si è verificato l’errore.
Questo rapporto è una traccia dello stack ed è utile per rintracciare i problemi nel codice.
La traccia dello stack va dal basso verso l’alto., Così qui:
toUppercase http://localhost:5000/index.js:3 <anonymous> http://localhost:5000/index.js:9
Possiamo dire:
- qualcosa in programma alla riga 9 denominato
toUppercase
-
toUppercase
fatto saltare in aria in linea 3
oltre a vedere questa traccia dello stack nel browser della console, è possibile accedere su stack
proprietà dell’oggetto di errore.
Se l’eccezione non viene rilevata, cioè non viene fatto nulla dal programmatore per catturarla, il programma si bloccherà.,
Quando e dove si rileva un’eccezione nel codice dipende dal caso d’uso specifico.
Ad esempio, potresti voler propagare un’eccezione nello stack per mandare in crash del tutto il programma. Questo potrebbe accadere per errori fatali, quando è più sicuro interrompere il programma piuttosto che lavorare con dati non validi.
Dopo aver introdotto le basi, rivolgiamo ora la nostra attenzione alla gestione degli errori e delle eccezioni sia nel codice JavaScript sincrono che asincrono.
Gestione sincrona degli errori
Il codice sincrono è la maggior parte delle volte semplice e quindi la sua gestione degli errori.,
Gestione degli errori per le funzioni regolari
Il codice sincrono viene eseguito nello stesso ordine in cui viene scritto. Riprendiamo l’esempio precedente:
Qui il motore chiama ed eseguetoUppercase
. Tutto avviene in modo sincrono. Per catturare un’eccezione proveniente da tale funzione sincrona è possibile usare try/catch/finally
:
try { toUppercase(4);} catch (error) { console.error(error.message); // or log remotely} finally { // clean up}
di Solito, try
occupa il felice percorso, o con la chiamata di funzione che, potenzialmente, potrebbero gettare.,
catch
invece, cattura l’eccezione effettiva. Riceve l’oggetto error, che possiamo ispezionare (e inviare da remoto ad alcuni logger in produzione).
L’istruzione finally
invece viene eseguita indipendentemente dal risultato della funzione: che sia fallita o riuscita, verrà eseguito qualsiasi codice all’interno di finally
.
Ricorda:try/catch/finally
è un costrutto sincrono: ora ha modo di catturare le eccezioni provenienti dal codice asincrono.,
Gestione degli errori per le funzioni del generatore
Una funzione del generatore in JavaScript è un tipo speciale di funzione.
Può essere messo in pausa e ripreso a volontà, oltre a fornire un canale di comunicazione bidirezionale tra il suo ambito interno e il consumatore.,
Per creare un generatore di funzione abbiamo messo una stella *
dopo il function
parola chiave:
function* generate() {//}
una Volta all’interno della funzione si può usare yield
per i valori di ritorno:
function* generate() { yield 33; yield 99;}
Il valore di ritorno da un generatore di funzione è un oggetto iteratore. Per estrarre valori da un generatore possiamo usare due approcci:
- chiamando
next()
sull’oggetto iteratore., - iterazione con
for...of
.
Se prendiamo il nostro esempio, per ottenere valori dal generatore possiamo fare:
function* generate() { yield 33; yield 99;}const go = generate();
Quigo
diventa il nostro oggetto iteratore quando chiamiamo la funzione generator.
D’ora in poi possiamo chiamare go.next()
per avanzare l’esecuzione:
function* generate() { yield 33; yield 99;}const go = generate();const firstStep = go.next().value; // 33const secondStep = go.next().value; // 99
I generatori funzionano anche al contrario: possono accettare valori ed eccezioni dal chiamante.,
Oltre a next()
, gli oggetti iteratori restituiti dai generatori hanno un metodo throw()
.
Con questo metodo siamo in grado di fermare il programma iniettando un’eccezione nel generatore:
Per la cattura di tale errore si sarebbe avvolgere il codice all’interno del generatore con try/catch
(e finally
se necessario):
function* generate() { try { yield 33; yield 99; } catch (error) { console.error(error.message); }}
Generatore di funzioni, è possibile anche generare eccezioni all’esterno., Il meccanismo per la cattura di queste eccezioni è lo stesso per la cattura di eccezioni sincrone: try/catch/finally
.
Ecco un esempio di una funzione generatrice consumata dall’esterno confor...of
:
Qui iteriamo il percorso felice all’interno di un bloccotry
. Se si verificano eccezioni, la interrompiamo con catch
.
Gestione asincrona degli errori
JavaScript è sincrono per natura, essendo un linguaggio a thread singolo.,
Gli ambienti host come i motori dei browser aumentano JavaScript con una serie di API Web per interagire con sistemi esterni e per gestire le operazioni di I / O bound.
Esempi di asincronicità nel browser sono timeout, eventi, Promesse.
La gestione degli errori nel mondo asincrono è distinta dalla sua controparte sincrona.
Vediamo alcuni esempi.
Gestione degli errori per i timer
All’inizio delle tue esplorazioni con JavaScript, dopo aver appreso di try/catch/finally
, potresti essere tentato di metterlo in giro per qualsiasi blocco di codice.,
Considera il seguente frammento:
function failAfterOneSecond() { setTimeout(() => { throw Error("Something went wrong!"); }, 1000);}
Questa funzione viene generata dopo circa 1 secondo. Qual è il modo giusto per gestire questa eccezione?
Il seguente esempio non funziona:
Come abbiamo detto,try/catch
è sincrono. D’altra parte abbiamo setTimeout
, un’API del browser per i timer.
Quando il callback è passato a setTimeout
viene eseguito, il nostro try/catch
è ormai lontano. Il programma si bloccherà perché non siamo riusciti a catturare l’eccezione.,
viaggiano su due tracce diverse:
Track A: --> try/catchTrack B: --> setTimeout --> callback --> throw
Se non vogliamo mandare in crash il programma, per gestire l’errore correttamente dobbiamo spostare try/catch
all’interno di callback per setTimeout
.
Ma questo approccio non ha molto senso la maggior parte delle volte. Come vedremo più avanti, la gestione asincrona degli errori con Promises fornisce una migliore ergonomia.,
Gestione degli errori per gli eventi
I nodi HTML nel modello a oggetti Document sono collegati aEventTarget
, l’antenato comune per qualsiasi emettitore di eventi nel browser.
Ciò significa che possiamo ascoltare gli eventi su qualsiasi elemento HTML nella pagina.
(Nodo.js supporterà EventTarget
in una versione futura).
La meccanica di gestione degli errori per gli eventi DOM segue lo stesso schema di qualsiasi API Web asincrona.
Considera il seguente esempio:
Qui generiamo un’eccezione non appena si fa clic sul pulsante. Come lo prendiamo?, Questo modello non funziona, e non impedire che il programma di crash:
Come con l’esempio precedente, con setTimeout
, qualsiasi richiamata passato addEventListener
viene eseguita in modo asincrono:
Track A: --> try/catchTrack B: --> addEventListener --> callback --> throw
Se non vogliamo mandare in crash il programma, per gestire l’errore correttamente dobbiamo spostare try/catch
all’interno di callback per addEventListener
.
Ma ancora una volta, non c’è poco valore nel fare questo.,
Come con setTimeout
, l’eccezione generata da un percorso di codice asincrono non è catturabile dall’esterno e bloccherà il programma.
Nelle prossime sezioni vedremo come Promises e async/await
possono facilitare la gestione degli errori per il codice asincrono.
Che ne dici di onerror?
Gli elementi HTML hanno un numero di gestori di eventi comeonclick
,onmouseenter
,onchange
per citarne alcuni.
C’è ancheonerror
, ma non ha nulla a che fare conthrow
e amici.,
Il gestore di eventi onerror
si attiva ogni volta che un elemento HTML come un tag <img>
o un <script>
colpisce una risorsa inesistente.,b4″>// omitted<body><img src="https://www.valentinog.com/blog/error/nowhere-to-be-found.png" alt="So empty!"></body>// omitted
Quando si visita un documento HTML con una mancanti o inesistente risorsa che il browser della console registra il messaggio di errore:
GET http://localhost:5000/https://www.valentinog.com/blog/error/nowhere-to-be-found.png
Nel nostro JavaScript che abbiamo la possibilità di “catturare” questo errore con il relativo gestore di eventi:
const image = document.querySelector("img");image.onerror = function(event) { console.log(event);};
O meglio:
const image = document.querySelector("img");image.addEventListener("error", function(event) { console.log(event);});
Questo modello è utile per il caricamento alternativo risorse mancanti immagini o script.,
Ma ricorda:onerror
, non ha nulla a che fare conthrow
otry/catch
.
Gestione degli errori con Promise
Per illustrare la gestione degli errori con Promise, “promisify” uno dei nostri esempi originali. Possiamo modificare la funzione riportata di seguito:
Invece di restituire una semplice stringa, o di un’eccezione, usiamo rispettivamente Promise.reject
e Promise.resolve
per gestire l’errore e il successo:
(Tecnicamente non c’è niente asincrona in questo codice, ma ben si presta a illustrare il punto).,
Ora che la funzione è “promisified” si può collegare then
per consumare il risultato, e catch
per la gestione rifiutato Promessa:
toUppercase(99) .then(result => result) .catch(error => console.error(error.message));
Questo codice log:
Wrong type given, expected a string
Nel regno della Promessa, catch
è il costrutto per la gestione degli errori.,
In aggiunta a catch
e then
abbiamo anche finally
, simile a finally
nel try/catch
.
Come la sincrono “rispetto”, la Promessa del finally
viene eseguito indipendentemente dalla Promessa risultato:
toUppercase(99) .then(result => result) .catch(error => console.error(error.message)) .finally(() => console.log("Run baby, run"));
tenere Sempre a mente che qualsiasi richiamata passato then/catch/finally
viene gestita in modo asincrono da Microtask Coda. Sono micro attività con precedenza su attività macro come eventi e timer.,
Promise, error, and throw
Come best practice quando si rifiuta una Promessa è conveniente fornire un oggetto error:
Promise.reject(TypeError("Wrong type given, expected a string"));
In questo modo si mantiene la gestione degli errori coerente attraverso la base di codice. Altri membri del team possono sempre aspettarsi di accedere aerror.message
, e più importante è possibile ispezionare le tracce dello stack.
Oltre a Promise.reject
, possiamo uscire da una catena di promesse lanciando un’eccezione.,
Considera il seguente esempio:
Promise.resolve("A string").then(value => { if (typeof value === "string") { throw TypeError("Expected a number!"); }});
Risolviamo una Promessa con una stringa, e quindi la catena viene immediatamente interrotta conthrow
.
Per fermare la propagazione delle eccezioni usiamo catch
, come al solito:
Questo pattern è comune in fetch
, dove controlliamo l’oggetto response in cerca di errori:
Qui l’eccezione può essere intercettata con catch
., Se falliamo, o decidiamo di non prenderlo lì, l’eccezione è libera di gonfiarsi nella pila.
Questo non è male di per sé, ma ambienti diversi reagiscono in modo diverso ai rifiuti non rilevati.
Nodo.js, ad esempio, in futuro lascerà andare in crash qualsiasi programma in cui i rifiuti promessi non vengono gestiti:
DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Meglio catturarli!
Gestione degli errori per i timer “promisified”
Con timer o eventi non è possibile rilevare eccezioni generate da un callback., Abbiamo visto un esempio nella sezione precedente:
Una soluzione offerta da Promise consiste nella “promisification” del nostro codice. Fondamentalmente, avvolgiamo il nostro timer con una Promessa:
function failAfterOneSecond() { return new Promise((_, reject) => { setTimeout(() => { reject(Error("Something went wrong!")); }, 1000); });}
Con reject
abbiamo attivato un rifiuto della Promessa, che porta un oggetto error.,
A questo punto siamo in grado di gestire l’eccezione con catch
:
failAfterOneSecond().catch(reason => console.error(reason.message));
Nota: è comune l’uso di value
come valore di ritorno da una Promessa, e reason
come la restituzione di un oggetto da un rifiuto.
Nodo.js ha un’utilità chiamata promisify per facilitare la” promessa ” delle API di callback vecchio stile.
Gestione degli errori in Promise.,all
Il metodo staticoPromise.all
accetta un array di Promise e restituisce un array di risultati da all resolving Promise:
Se una di queste Promise rifiuta,Promise.all
rifiuta con l’errore della prima Promessa rifiutata.
Per gestire queste situazioni in Promise.all
si usa catch
‘, come abbiamo fatto nella sezione precedente:
Per eseguire una funzione a prescindere dal risultato del Promise.all
, ancora, si può usare finally
:
la gestione degli errori in Promessa.,qualsiasi
Possiamo considerarePromise.any
(Firefox> 79, Chrome> 85) come l’opposto diPromise.all
.
Mentre Promise.all
restituisce un errore anche se una singola Promessa nell’array rifiuta, Promise.any
ci dà sempre la prima Promessa risolta (se presente nell’array) indipendentemente da qualsiasi rifiuto si è verificato.
Nel caso in cui invece tutta la Promessa sia passata a Promise.any
rifiuta, l’errore risultante è un AggregateError
., Si consideri il seguente esempio:
Qui gestiamo l’errore con catch
., L’output di questo codice è:
AggregateError: No Promise in Promise.any was resolvedAlways runs!
AggregateError
oggetto ha le stesse proprietà di un Error
più un errors
proprietà:
// .catch(error => console.error(error.errors))//
Questa proprietà è una matrice di ogni singolo errore prodotta da rifiutare:
la gestione degli errori in Promessa.,race
Il metodo staticoPromise.race
accetta una matrice di Promise:
Il risultato è la prima Promessa che vince la “race”.
Che ne dici dei rifiuti allora? Se la Promessa di rifiuto non è la prima ad apparire nell’array di input, Promise.race
risolve:
Se il rifiuto appare invece come primo elemento dell’array, Promise.race
rifiuta, e dobbiamo catturare il rifiuto:
Gestione degli errori in Promise.allSettled
Promise.allSettled
è un’aggiunta ECMAScript 2020 alla lingua.,
Non c’è molto da gestire con questo metodo statico poiché il risultato sarà sempre una Promessa risolta, anche se una o più promesse di input vengono rifiutate.
Considera il seguente esempio:
Passiamo aPromise.allSettled
un array composto da due Promesse: una risolta e un’altra respinta.
In questo caso catch
non verrà mai colpito. finally
invece viene eseguito.,
Il risultato di questo codice, registrato nel then
è:
Errore di gestione per async/await
async/await
in JavaScript, che indica le funzioni asincrone, ma da un lettore di vista beneficiare di tutti i leggibilità del sincrono funzioni.,
Per mantenere le cose semplici, noi porteremo il nostro precedente funzione sincrona toUppercase
e che la trasformazione di una funzione asincrona mettendo async
prima di function
parola chiave:
Solo anteponendo una funzione con async
siamo in causa la funzione deve restituire una Promessa., Ciò significa che possiamo concatenare then
, catch
e finally
dopo la chiamata di funzione:
Quando lanciamo da una funzione async
l’eccezione diventa causa di rifiuto per la Promessa sottostante.
Qualsiasi errore può essere intercettato concatch
dall’esterno.
Più importante, oltre a questo stile possiamo usaretry/catch/finally
, proprio come faremmo con una funzione sincrona.,
Nell’esempio che segue viene chiamata toUppercase
da un’altra funzione, consumer
, che comodamente include la funzione di chiamata con try/catch/finally
:
L’output è:
Wrong type given, expected a stringAlways runs!
Sullo stesso argomento: Come Buttare Errori Da Async Funzioni in JavaScript?
Gestione degli errori per i generatori asincroni
I generatori asincroni in JavaScript sono funzioni generatrici in grado di produrre Promesse anziché valori semplici.,
Combinano le funzioni del generatore conasync
. Il risultato è una funzione generatrice i cui oggetti iteratori espongono una Promessa al consumatore.
Per creare un generatore asincrono dichiariamo un generatore di funzione con la stella *
, il prefisso async
:
async function* asyncGenerator() { yield 33; yield 99; throw Error("Something went wrong!"); // Promise.reject}
Essendo basato sulla Promessa, le stesse regole per la gestione degli errori applica qui., throw
all’interno di un generatore asincrono causa un rifiuto della Promessa, che intercettiamo con catch
.
Per estrarre le promesse da un generatore asincrono possiamo usare due approcci:
-
then
gestori. - iterazione asincrona.
Dall’esempio precedente sappiamo per certo che ci sarà un’eccezione dopo i primi due yield
., Ciò significa che possiamo fare:
L’output da questo codice è:
{ value: 33, done: false }{ value: 99, done: false }Something went wrong!
L’altro approccio utilizza l’iterazione asincrona confor await...of
. Per utilizzare l’iterazione asincrona è necessario avvolgere il consumatore con una funzioneasync
.,
Ecco un esempio completo:
E con async/await
e gestire potenziali eccezione con try/catch
:
L’uscita di questo codice è:
3399Something went wrong!
L’iteratore oggetto restituito da un generatore asincrono funzione ha anche un throw()
metodo, proprio come la sua controparte sincrona.,
Chiama throw()
un oggetto iteratore qui non gettare un’eccezione, ma una Promessa di rifiuto:
Per gestire questa situazione dall’esterno si può fare:
go.throw(Error("Let's reject!")).catch(reason => console.error(reason.message));
Ma non dimentichiamo che iteratore oggetti throw()
invia l’eccezione all’interno del generatore. Ciò significa che possiamo anche applicare il seguente modello:
Gestione degli errori nel nodo.js
Gestione sincrona degli errori nel nodo.js
Gestione sincrona degli errori nel nodo.,js non differisce troppo da quello che abbiamo visto finora.
Per il codice sincrono, try/catch/finally
funziona bene.
Tuttavia, le cose si fanno interessanti se diamo un’occhiata al mondo asincrono.
Gestione asincrona degli errori nel Nodo.js: il modello di callback
Per il codice asincrono, Nodo.js si basa fortemente su due idiomi:
- il modello di callback.
- emettitori di eventi.
Nel modello di callback, Nodo asincrono.le API js accettano una funzione che viene gestita attraverso il ciclo di eventi ed eseguita non appena lo stack di chiamate è vuoto.,
Considera il seguente codice:
Se estraiamo il callback da questo elenco, possiamo vedere come dovrebbe gestire gli errori:
//function(error, data) { if (error) console.error(error); // do stuff with the data }//
Se qualche errore deriva dalla lettura del percorso dato con fs.readFile
, otteniamo un oggetto error.
A questo punto possiamo:
- semplicemente registrare l’oggetto error come abbiamo fatto.
- genera un’eccezione.
- passa l’errore a un altro callback.,
Per lanciare un’eccezione possiamo fare:
Tuttavia, come con eventi e timer nel DOM, questa eccezione andrà in crash il programma. Il seguente tentativo di fermare con try/catch
non funziona:
Passando l’errore di un altro callback è l’opzione preferita, se non vogliamo mandare in crash il programma:
errorHandler
è quello che suggerisce il nome, una semplice funzione per la gestione dell’errore:
Asincroni gestione degli errori nel Nodo.js: emettitori di eventi
Gran parte di ciò che fai nel nodo.js si basa su eventi., La maggior parte delle volte si interagisce con un oggetto emettitore e alcuni osservatori in ascolto per i messaggi.
Qualsiasi modulo basato su eventi (come net per esempio) nel nodo.js estende una classe radice denominata EventEmitter
.
EventEmitter
nel Nodo.js ha due metodi fondamentali: on
eemit
.
Considera questo semplice server HTTP:
Qui ascoltiamo due eventi: ascolto e connessione.
Oltre a questi eventi, gli emettitori di eventi espongono anche un evento di errore, attivato in caso di errori.,
Se si esegue questo codice in ascolto sulla porta 80, invece dell’esempio precedente, si otterrà un’eccezione:
Uscita:
afferrare se siamo in grado di registrare un gestore eventi per l’errore:
server.on("error", function(error) { console.error(error.message);});
in Questo modo, di stampa:
listen EACCES: permission denied 127.0.0.1:80
In aggiunta, il programma non crash.
Per saperne di più sull’argomento, considera anche la lettura di “Gestione degli errori nel nodo.js”.,
Avvolgimento
In questa guida abbiamo trattato la gestione degli errori in JavaScript per l’intero spettro, dal semplice codice sincrono, alle primitive asincrone avanzate.
Ci sono molti modi in cui un’eccezione può manifestarsi nei nostri programmi JavaScript.
Le eccezioni dal codice sincrono sono le più semplici da catturare. Le eccezioni dai percorsi di codice asincroni possono invece essere difficili da gestire.
Nel frattempo, le nuove API JavaScript nel browser sono quasi tutte dirette verso Promise
., Questo modello pervasivo semplifica la gestione delle eccezioni conthen/catch/finally
, o contry/catch
perasync/await
.
Dopo aver letto questa guida dovresti essere in grado di riconoscere tutte le diverse situazioni che possono sorgere nei tuoi programmi e cogliere correttamente le tue eccezioni.
Grazie per la lettura e rimanete sintonizzati!
Questo post è disponibile anche in:
- Giapponese
- Cinese
Lascia un commento