⊗jsSpACCH 160 of 294 menu

Il problema del callback hell in JavaScript

Supponiamo di voler caricare tre immagini utilizzando la funzione loadImage:

loadImage('img1.png', function(image, err) { document.body.append(image); }); loadImage('img2.png', function(image, err) { document.body.append(image); }); loadImage('img3.png', function(image, err) { document.body.append(image); });

C'è qualcosa che non va in questo codice. Il fatto è che le immagini verranno aggiunte al body man mano che vengono caricate. Ciò significa che nessuno ci garantisce che le immagini verranno aggiunte esattamente nell'ordine che desideriamo.

C'è dell'altro. Supponiamo di voler fare qualcosa quando tutte e tre le immagini saranno caricate. Nel nostro codice semplicemente non potremmo cogliere questo momento, poiché tutte e tre le immagini si caricano indipendentemente.

Ok, modifichiamo il codice:

loadImage('img1.png', function(image1, err1) { document.body.append(image1); loadImage('img2.png', function(image2, err2) { document.body.append(image2); loadImage('img3.png', function(image3, err3) { document.body.append(image3); console.log('tutte le immagini sono state caricate'); }); }); });

Abbiamo risolto entrambi i problemi descritti. Tuttavia, in cambio ne abbiamo ottenuto un altro. Per ora non è ancora molto evidente, ma immaginate come apparirebbe il nostro codice se prevedesse il caricamento non di tre, ma, diciamo, dieci immagini, più l'aggiunta della gestione delle eccezioni. Di conseguenza, il codice diventerebbe estremamente illeggibile: la complessità del codice cresce in modo esponenziale con l'annidamento delle callback l'una dentro l'altra. Questa situazione è chiamata callback hell - inferno delle callback.

Riscrivete il codice fornito in modo che preveda il caricamento di 10 immagini più la gestione delle eccezioni. Verificate che otteniate una situazione di callback hell.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta