⊗jsSpPrmPH 173 of 294 menu

JavaScript හි පොරොමිස් පිටලම ගැටළුව

ඔබ දැනටමත් දන්නවා, කොල්බැක් පිටලම (callback hell) ගැටළුව විසඳීම සඳහා පොරොමිස් (promises) නිර්මාණය කරන ලද්දේ. කෙසේ වෙතත්, කාලයත් සමඟ පෙනී ගියේ පොරොමිස් ද සංකීර්ණ කේතයක් බිහි කිරීමට හැකි බවයි. මෙම ගැටළුව සංසන්දනය කරමින් නම් කරන ලද්දේ promise hell ලෙසිනි.

කේත උදාහරණ මගින් මෙම ගැටළුව බලමු. අපට getSmth නම් විධානයක් ඇති බව සිතමු, පරාමිතියක් ලබා ගෙන එම පරාමිතිය අනුව ප්‍රතිඵලය ලබා දෙන:

function getSmth(num) { return new Promise((resolve, reject) => { setTimeout(() => resolve(num * num), 1000) }); }

මෙම අවස්ථාවේ දී අපි යම් ප්‍රයෝජනවත් ක්‍රියාවක් (උදාහරණයක් ලෙස සේවාදායකයෙන් දත්ත ලබා ගැනීම) අනුකරණය කරමු. අනුකරණය ලෙස අපි සරලව පරාමිතියක් ලෙස අංකයක් යොමු කර තත්පරයකින් එම අංකයේ වර්ගය ලබා දෙමු.

දැන් අපි අපගේ getSmth විධානය තවත් විධානයක ඇතුළත භාවිතා කරමු:

function func() { getSmth(2).then(res => { console.log(res); // 4 ප්‍රදර්ශනය කරයි }); } func();

පළමු ගැටළුව

තනි තනිව අනුගමනය වන බොහෝ then ඉදිකිරීම් කේතය අවබෝධ කර ගැනීම දුෂ්කර කරයි:

function func(){ getSmth(2).then(res1 => { // යමක් කරන්න }).then(res2 => { // යමක් කරන්න }).then(res3 => { // යමක් කරන්න }).then(res4 => { // යමක් කරන්න }).then(res5 => { // යමක් කරන්න }).then(res6 => { // යමක් කරන්න }); } func();

දෙවන ගැටළුව

වෙනත් ස්වභාවයක ගැටළුවක් ද ඇත. දැන් අපට අපගේ විධානය දෙවරක් භාවිතා කිරීමට අවශ්‍ය යැයි සිතමු, පසුව ප්‍රතිඵල සාරාංශ කරන්න. ප්‍රතිඵලයක් ලෙස අපට මෙවැනි කේතයක් ලැබේ:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { console.log(res1 + res2); // 13 ප්‍රදර්ශනය කරයි }); }); } func();

දැනටමත් කොල්බැක් පිටලම (callback hell) මතක් කරයි, නේද? තවත් විධාන ක්‍රියාත්මක කිරීමක් එකතු කරමු - කේතය තවත් දුර්වල වේ:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();

ඇත්ත වශයෙන්ම, Promise.all භාවිතා කළ හැකිය:

function func() { Promise.all([getSmth(2), getSmth(3), getSmth(4)]).then(res => { console.log(res[0] + res[1] + res[2]); }); } func();

කෙසේ වෙතත්, අපි එකම දේ ලබා ගත්තාද? නැහැ! පළමු අවස්ථාවේ දී සෑම නව විධානයක්ම පෙර පොරොමිසය (promise) අවසන් වීම බලා සිටී, එනමුත් දෙවන අවස්ථාවේ දී - සියලු පොරොමිස් එකවර ක්‍රියාත්මක වේ. මෙම වෙනස සැලකිය යුතු වන්නේ අපි ඊළඟ විධානයට යොමු කිරීමට අවශ්‍ය වූ විට පෙර විධානය ක්‍රියාත්මක කිරීම:

function func() { getSmth(2).then(res1 => { getSmth(res1).then(res2 => { getSmth(res2).then(res3 => { console.log(res3); }); }); }); } func();
සිංහල
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
අපි වෙබ් අඩවිය ක්‍රියාත්මක කිරීම, විශ්ලේෂණය සහ පුද්ගලීකරණය සඳහා කුකී භාවිතා කරමු. දත්ත සැකසීම සිදුකරනු ලබන්නේ ගෝපනීයතා ප්‍රතිපත්තිය අනුව ය.
සියල්ල පිළිගන්න කොන්දේසි ප්‍රතික්ෂේප කරන්න