JavaScript ရှိ Promises များကို နိဒါန်း
Callback မော်ဒယ်ကို အသုံးပြုခြင်းသည် callback hell အနေအထားသို့ အလွယ်တကူ ရောက်ရှိစေနိုင်ကြောင်း သင်သိပြီးဖြစ်သည်။ ထို့ကြောင့် JavaScript တွင် promises (promise) ဟုခေါ်သော မော်ဒယ်အသစ်တစ်ခု မိတ်ဆက်ခဲ့သည်။ ဤမော်ဒယ်ကို အတူလေ့လာကြပါစို့။
Promise သည် object တစ်ခုဖြစ်ပြီး ၎င်းထဲသို့ ကျွန်ုပ်တို့၏ asynchronous code ကိုထည့်ရန် လိုအပ်သည့် function တစ်ခုကို parameter အဖြစ် ပေးပို့ရပါမည်။
javascriptlet promise = new Promise(function() {
// asynchronous code
});
မြင်တွေ့ရသည့်အတိုင်း၊ promise object ကို promise variable ထဲသို့ သိမ်းထားပါသည်။ Code ၏ အခြားနေရာတစ်ခုတွင် ဤ variable ကို ဤ promise ဖန်တီးချိန်တွင် ရေးသားထားသော asynchronous code ပြီးဆုံးသွားပါက ထို code ကိုထည့်သွင်းရန် function တစ်ခုကို ပေးပို့ခြင်းဖြင့် then method ကို အသုံးပြုနိုင်ပါသည်။
javascriptpromise.then(function() {
// executes upon completion of the asynchronous code
});
ရှုပ်ထွေးနေသလို ခံစားရသောကြောင့် ဥပမာတစ်ခုကို ကြည့်ကြပါစို့။ ကျွန်ုပ်တွင် အောက်ပါ asynchronous code ရှိသည်ဆိုပါစို့။
javascriptsetTimeout(function() {
let result = [1, 2, 3, 4, 5];
}, 3000);
ကျွန်ုပ်၏အဓိက asynchronous လုပ်ဆောင်ချက် - timer ဖြစ်ပြီးနောက် ကုဒ်တစ်ခုကို လုပ်ဆောင်ရန် - ကိုဖြေရှင်းလိုပါသည်။ ထို့အပြင် ကျွန်ုပ်သည် ထို code ကို timer အတွင်း၌ ထည့်သွင်းရန်မလိုဘဲ၊ result variable ထဲတွင် ရေးသားထားသော ရလဒ်ကို ထို code ထဲသို့ တစ်နည်းနည်းဖြင့် ရောက်ရှိလာစေလိုပါသည်။ အမှန်စင်စစ်၊ ကျွန်ုပ်တို့သည် ယခင်သင်ခန်းစာများတွင် callback များနှင့် subscription များမှတစ်ဆင့် ဤလုပ်ဆောင်ချက်ကို ဖြေရှင်းခဲ့ကြသည်။ Promise များမှတစ်ဆင့် ဤသို့လုပ်ဆောင်နည်းကို ယခုကြည့်ကြပါစို့။
ပထမဦးစွာ ကျွန်ုပ်တို့၏ asynchronous code ကို promise တစ်ခုထဲသို့ ထည့်သွင်းရပါမည်။
javascriptlet promise = new Promise(function() {
setTimeout(function() {
let result = [1, 2, 3, 4, 5];
}, 3000);
});
သို့သော် ၎င်းသည် မလုံလောက်သေးပါ။ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ asynchronous code ပြီးဆုံးကြောင်း ရှင်းရှင်းလင်းလင်း ဖော်ပြရပါမည်။ ဤနေရာတွင် ပထမဆုံး parameter တွင်သတ်မှတ်ထားလျှင် အလိုအလျောက်ရောက်ရှိလာသော အထူးပြီးဆုံးမှု function တစ်ခုက အကူအညီပေးပါလိမ့်မည်။
javascriptlet promise = new Promise(function(resolve) { // parameter ကိုသတ်မှတ်ပါ
setTimeout(function() {
let result = [1, 2, 3, 4, 5];
}, 3000);
});
ပြီးဆုံးမှု function ကို အသုံးပြု၍ asynchronous code ပြီးဆုံးကြောင်းကို promise ထံသို့ ရှင်းရှင်းလင်းလင်း ဖော်ပြနိုင်ပါသည်။ ဤသို့လုပ်ဆောင်ရန် ကျွန်ုပ်တို့လိုအပ်သော နေရာတွင် ဤ function ကိုခေါ်ယူရပါမည်။
javascriptlet promise = new Promise(function(resolve) {
setTimeout(function() {
let result = [1, 2, 3, 4, 5];
resolve(); // promise ကိုပြီးဆုံးစေသည်
}, 3000);
});
ထို့အပြင် asynchronous code ၏ ရလဒ်တစ်ခုခုကို ပြင်ပသို့ လွှဲပြောင်းပေးလိုပါက၊ ထိုရလဒ်ကို ကျွန်ုပ်တို့၏ ပြီးဆုံးမှု function ၏ parameter အဖြစ် လွှဲပြောင်းပေးနိုင်ပါသည်။
javascriptlet promise = new Promise(function(resolve) {
setTimeout(function() {
let result = [1, 2, 3, 4, 5];
resolve(result); // ရလဒ်ကိုလွှဲပြောင်းပေးသည်
}, 3000);
});
ကြားခံ variable ကို ဖယ်ရှားနိုင်သည်မှာ သိသာပါသည်။
javascriptlet promise = new Promise(function(resolve) {
setTimeout(function() {
resolve([1, 2, 3, 4, 5]);
}, 3000);
});
ယခု အခြားမည်သည့်နေရာတွင်မဆို ကျွန်ုပ်တို့၏ promise ၏ then method ကို ခေါ်ယူနိုင်ပါသည်။
javascriptpromise.then(function() {
// promise ပြီးဆုံးသွားသောအခါ အလုပ်လုပ်မည်
});
ကျွန်ုပ်တို့၏ function တွင် ပထမဆုံး parameter အဖြစ် သတ်မှတ်လိုပါက promise ၏ရလဒ်သည် ထို function ထဲသို့ ရောက်ရှိလာမည်ဖြစ်သည်။
javascriptpromise.then(function(result) {
console.log(result); // ရလဒ်ပါဝင်သော array ကို ထုတ်ပြမည်
});
Promise တစ်ခုကို ဖန်တီးပါ။ ၎င်း၏အတွင်းတွင် 5 စက္ကန့် နှောင့်နှေးမှုရှိပြီး၊ ထိုနှောင့်နှေးမှုပြီးနောက် promise သည် အလုပ်လုပ်ကာ ၎င်း၏ရလဒ်အဖြစ် စာသားတစ်ခုခုကို ပြန်ပေးရပါမည်။ ထိုစာသားကို စခရင်ပေါ်တွင် ထုတ်ပြပါ။