JavaScript တွင် အလုပ်လုပ်ပြီးသော Promise များ ဖန်တီးခြင်း
တစ်ခါတစ်ရံတွင် သင်သည် အလုပ်လုပ်ပြီးသော Promise တစ်ခုကို ဖန်တီးရန် လိုအပ်လာနိုင်ပါသည်။ ဤအတွက် နည်းလမ်းနှစ်ခု ရှိပါသည်။ Promise.resolve နည်းလမ်းသည် အောင်မြင်စွာ ပြီးဆုံးသွားသော Promise တစ်ခုကို ဖန်တီးပြီး၊ Promise.reject နည်းလမ်းသည် ငြင်းပယ်ခံရသော Promise တစ်ခုကို ဖန်တီးပါသည်။ ဤနည်းလမ်းများသည် ၎င်းတို့၏ ပါရာမီတာအဖြစ် Promise ၏ ရလဒ် သို့မဟုတ် မှားယွင်းချက် ဖြစ်လာမည့် အရာကို လက်ခံရရှိပါသည်။
အလုပ်လုပ်ပြီးသော Promise ကို မည်သည့်အခါမှာ လိုအပ်နိုင်မည်နည်း။ ဥပမာတစ်ခုဖြင့် ကြည့်ကြပါစို့။ ကျွန်ုပ်တို့တွင် ဂဏန်းတစ်ခုကို ပါရာမီတာအဖြစ် လက်ခံပြီး ၎င်းကို ရှင်းလင်းချက် (asynchronous) အရ တစ်ခုခုလုပ်ဆောင်ကာ ရလဒ်ဖြင့် Promise ပြန်ပေးသော ဖန်ရှင်တစ်ခု ရှိသည်ဆိုပါစို့။
function func(num) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
}
ကျွန်ုပ်တို့၏ ဖန်ရှင်ကို အောက်ပါအတိုင်း အသုံးပြုပါမည်။
func(5).then(function(res) {
console.log(res); // 25 ကို ပြသမည်
});
ယခု ကျွန်ုပ်တို့ ဆုံးဖြတ်လိုက်သည်မှာ ကျွန်ုပ်တို့၏ ရှင်းလင်းချက် (asynchronous) လုပ်ဆောင်ချက်ကို သုညထက် ကြီးသော ဂဏန်းတစ်ခု ပေးပို့ခံရမှသာ လုပ်ဆောင်မည်ဟု ဆိုကြပါစို့။ သို့မဟုတ်ပါက ဖန်ရှင်၏ ရလဒ်သည် သုည ဖြစ်သင့်ပါသည်။
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return 0; // သုည ရလဒ်
}
}
သို့သော် ယခုအခါ ဖန်ရှင်သည် Promise သို့မဟုတ် ဂဏန်းကို ပြန်ပေးသည်ဟု ဆိုလိုပါသည်။ ဤအကြောင်းကြောင့် ဖန်ရှင်၏ ရလဒ်ကို then နည်းလမ်းကို ကျည့်ရှု့၍ မရတော့ပါ။ အဘယ်ကြောင့်ဆိုသော် ဖန်ရှင်က ဂဏန်းတစ်ခုကို ပြန်ပေးသောအခါ မှားယွင်းချက်တစ်ခု ရရှိမည်ဖြစ်သည်။
func(0).then(function(res) { // မှားယွင်းချက်၊ သုညကို then နည်းလမ်းအသုံးပြုနေသည်
});
Promise.resolve သည် ဤပြဿနာကို ဖြေရှင်းရန် ကျွန်ုပ်တို့ကို ကူညီပေးမည်။
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return Promise.resolve(0); // ဂဏန်းမဟုတ်ဘဲ Promise ကို ပြန်ပေးသည်
}
}
ယခု ကျွန်ုပ်တို့ ဆုံးဖြတ်လိုက်သည်မှာ ပေးပို့ထားသော သုညအတွက် သုညကို ပြန်ပေးသင့်ပြီး၊ သုညထက် ငယ်သော ဂဏန်းများအတွက် ခြွင်းချက်တစ်ခုကို ပြန်ပေးသင့်သည်ဟု ဆိုကြပါစို့။ Promise.reject နည်းလမ်းသည် ဤကိစ္စတွင် ကျွန်ုပ်တို့ကို ကူညီပေးမည်။
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else if (num === 0) {
return Promise.resolve(0);
} else {
return Promise.reject('incorrect number'); // ငြင်းပယ်ခံရသော Promise ကို ပြန်ပေးမည်
}
}