⊗jsSpACCH 160 of 294 menu

Callback hell-problemet i JavaScript

La oss si at vi ønsker å laste ned tre bilder ved hjelp av funksjonen 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); });

Det er noe galt med denne koden. Saken er at bildene vil bli lagt til i body ettersom de lastes ned. Det betyr at ingen garanterer oss at bildene vil bli lagt til nettopp i den rekkefølgen vi trenger.

Det er noe mer. La oss si at vi ønsker å gjøre noe når alle tre bildene er lastet ned. I koden vår vil vi rett og slett ikke kunne fange dette øyeblikket, fordi alle tre bildene lastes ned uavhengig.

Ok, la oss omskrive koden:

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('alle bilder er lastet ned'); }); }); });

Vi løste begge de beskrevne problemene. Imidlertid fikk vi et annet problem i bytte. Foreløpig er det ikke sterkt synlig, men se for deg hvordan koden vår vil se ut hvis den ikke inneholder lasting av tre, men for eksempel ti bilder, pluss at unntakshåndtering er lagt til. Som et resultat vil koden bli ekstremt vanskelig å lese: kodekompleksiteten øker i et skred ved innkapsling av callbacks inni hverandre. En slik situasjon kalles callback hell - callback helvete.

Omskriv den gitte koden slik at den inneholder lasting av 10 bilder pluss unntakshåndtering. Forsikre deg om at du ender opp med en callback hell-situasjon.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis