⊗jsSpPrmPH 173 of 294 menu

JavaScript ရှိ Promise Hell ပြဿနာ

Callback hell ပြဿနာကို ဖြေရှင်းရန် promises များကို ဖန်တီးခဲ့ကြောင်း သင်သိပြီးဖြစ်ပါလိမ့်မည်။ သို့သော် အချိန်ကြာလာသည်နှင့်အမျှ promises များသည်လည်း ရှုပ်ထွေးသောကုဒ်များကို ဖြစ်ပေါ်စေနိုင်ကြောင်း သိလာရပါသည်။ ဤပြဿနာကို အလားတူပင်� promise hell ဟု အမည်ပေးခဲ့သည်။

ကုဒ်နမူနာများဖြင့် ဤပြဿနာကို ကြည့်ရှုကြပါစို့။ ကျွန်ုပ်တို့တွင် getSmth ဟုခေါ်သော ဖန်ရှင်တစ်ခုရှိသည်ဆိုပါစို့၊ ထိုဖန်ရှင်သည် parameter တစ်ခုကို လက်ခံပြီး ထို parameter ပေါ်မူတည်၍ ရလဒ်ကို ပြန်ပေးပါသည်။

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

ဤကိစ္စတွင် ကျွန်ုပ်တို့သည် အသုံးဝင်သော လုပ်ဆောင်ချက်တစ်ခုကို (ဥပမာ ဆာဗာမှ ဒေတာရယူခြင်း) အစားထိုး စမ်းသပ်နေခြင်းဖြစ်သည်။ အစားထိုးစမ်းသပ်မှုအဖြစ် ကျွန်ုပ်တို့သည် နံပါတ်တစ်ခုကို parameter အဖြစ် ပို့ပေးပြီး တစ်စက္ကန့်အကြာတွင် ထိုနံပါတ်၏ စတုရန်းကို ပြန်ပေးပါသည်။

ယခု ကျွန်ုပ်တို့၏ 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 ကို စောင့်ဆိုင်းနေပြီး၊ ဒုတိယကိစ္စတွင် promises အားလုံးသည် တစ်ပြိုင်နက်တည်း လုပ်ဆောင်နေပါသည်။ ကျွန်ုပ်တို့သည် ယခင်ကတည်းက ခေါ်ဆိုမှုကို နောက်ထပ်ဖန်ရှင်သို့ ပို့ဆောင်လိုသည့်အခါတွင် ဤကွဲပြားချက်သည် သိသာထင်ရှားပါလိမ့်မည်။

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МакедонскиMelayuNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ဝက်ဘ်ဆိုက် လုပ်ဆောင်ခြင်း၊ ဆန်းစစ်လေ့လာခြင်းနှင့် ပုဂ္ဂလိကပြုပြင်ခြင်းအတွက် ကျွန်ုပ်တို့သည် cookie များကို အသုံးပြုပါသည်။ ဒေတာများကို ပြုပြင်ခြင်းသည် ကိုယ်ရေးကိုယ်တာ မူဝါဒအတိုင်း ဖြစ်ပါသည်။
အားလုံးလက်ခံရန် ပြင်ဆင်ရန် ငြင်းပယ်ရန်