⊗jsSpACCH 160 of 294 menu

Проблема callback hell в JavaScript

Да предположим, че искаме да заредим три изображения с помощта на функцията 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); });

С този код има нещо нередно. Работата е там, че изображенията ще бъдат добавени в body докато се зареждат. Тоест никой не гарантира на нас, че изображенията ще бъдат добавени именно в реда, от който се нуждаем.

Има още нещо. Да предположим, че искаме да направим нещо, когато всички три изображения са заредени. В нашия код просто няма да можем да уловим този момент, тъй като всички три изображения се зареждат независимо.

Добре, нека преработим кода:

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('всички изображения са заредени'); }); }); });

Решихме и двата описани проблема. Обаче, получихме в замяна друг. Все още не е много видим, но представете си как ще изглежда нашият код, ако в него има зареждане не на три, а, да кажем, десет изображения, плюс ще бъде добавена обработка на изключения. В резултат кодът ще стане изключително нечетим: сложността на кода лавинообразно нараства при влагане на callback функции една в друга. Такава ситуация се нарича callback hell - адът на callback функциите.

Пренапишете дадения код така, че в него да има зареждане на 10 изображения плюс обработка на изключения. Уверете се, че получавате ситуация на callback hell.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне