Мушкили 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 мерасед.