Guest User

Untitled

a guest
Mar 22nd, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.86 KB | None | 0 0
  1. # JavaScript Promise & async/await
  2.  
  3. JavaScript တွင် Asynchronous process များအတွက် Callback များကို သုံးနိုင်သည်။ Asynchronous Process ဆိုသည်မှာ Synchronous Process ၏ ဆန့်ကျင်ဘက်ဖြစ်သည်။ Synchronous Process ဆိုသည်မှာ လုပ်ငန်းစဉ်များကို တစ်ခုပြီးမှသာ နောက်တစ်ခု ဆက်ခြင်းအားဖြင့် အစီအစဉ်အတိုင်း အလုပ်လုပ်သွားသည့် Process ဖြစ်သည်။ Asynchronous Process များတွင် လုပ်ငန်းစဉ်တစ်ခု ပြီးဆုံးအောင် နောက်တစ်ခုက စောင့်ရန်မလို၊ ကြိုတင်၍သော်လည်ကောင်း၊ ပြိုင်တူသော်လည်ကောင်း ဆောင်ရွက်သည့် သဘောဖြစ်သည်။
  4.  
  5. ဥပမာ - ကောင်မလေးတစ်ယောက်ကို ချဉ်းကပ်စကားပြောလိုသည့် လူငယ်တစ်ဦး ရှိသည် ဆိုကြပါစို့။ ထိုလုပ်ငန်းစဉ်အတွက် Synchronous Process ကို သုံးပါက အောက်ပါအတိုင်း ဖြစ်ပေလိမ့်မည်။
  6.  
  7. ```javascript
  8. function check() {
  9. // walk to her
  10. // status = check her out
  11.  
  12. return status;
  13. }
  14.  
  15. function greet(status) {
  16. if(status.cute) {
  17. // say 'Hello, I like you'
  18. } else {
  19. // say 'Hello, good bye'
  20. }
  21. }
  22.  
  23. var status = check();
  24. greet(status);
  25. ```
  26.  
  27. နမူနာအရ.. ပထမဦးစွာ `check()` Function ကိုသုံး၍ ကောင်မလေးနားသွားကာ အခြေအနေကို အကဲခတ်ပေမည်။ အခြေအနေ သိရပြီပြီးနောက်မှ (သို့) `check()` Function အလုပ်လုပ်၍ ပြီးပြီဆိုမှ.. အခြေအနေပေါ် မူတည်၍ `greet()` Function ကို သုံး၍ မည်သည့်စကား ပြောမည်ကို ဆုံးဖြတ်ခြင်း ဖြစ်ပေသည်။
  28.  
  29. ဤ Process ကို Callback အသုံးပြု၍ Asynchronous ပုံစံ ပြောင်းလဲ အလုပ်လုပ်စေမည်ဆိုပါက အောက်ပါအတိုင်း ဖြစ်ပေလိမ့်မည်။
  30.  
  31. ```javascript
  32. function check(greet) {
  33. // walk to her
  34. // status = check her out
  35.  
  36. greet(status);
  37. }
  38.  
  39. check(function(status) {
  40. if(status.cute) {
  41. // say 'Hello, I like you'
  42. } else {
  43. // say 'Hello, good bye'
  44. }
  45. });
  46. ```
  47.  
  48. `check()` Function ကို ခေါ်ယူစဉ် `check()` Function အလုပ်လုပ်၍ ပြီးအောင်စောင့်မနေပဲ.. ဆက်လက်အလုပ်လုပ်ရမည့် `greet()` Function ကို Callback အဖြစ် (သို့) Parameter အဖြစ် လက်ဆင့်ကမ်း ပေးလိုက်ခြင်းဖြစ်သည်။ အခြေအနေသိရပြီးနောက်မှ မည်သည့်စကား ပြောမည်ကို ဆုံးဖြတ်ခြင်း မဟုတ်ပဲ၊ အခြေအနေ သိရလျှင်မည်သည့်စကား ပြောမည်ကို ကြိုတင်ဆုံးဖြတ် သတ်မှတ်ပေးလိုက်ခြင်း ဖြစ်ပေသည်။
  49.  
  50. ဤနည်းဖြင့် JavaScript တွင် Callback များကိုသုံးကာ Asynchronous Code များ ရေးသားနိုင်သည်။ ယခုအခါ ES6 ဟုခေါ်သော JavaScript နည်းသစ်နှင့်အတူ `Promise` ဟုခေါ်သော ရေးထုံးအသစ်ပါဝင်လာသည်။ `Promise` ကို အသုံးပြု၍လည်း Asynchronous Code များ ရေးသားနိုင်ပေသည်။ ဥပမာ -
  51.  
  52. ```javascript
  53. function check() {
  54. // walk to her
  55. // status = check her out
  56.  
  57. return new Promise(function(resolve, reject) {
  58. if(status.cute) {
  59. resolve();
  60. } else {
  61. reject();
  62. }
  63. });
  64. }
  65.  
  66. check().then(function(resolve) {
  67. // say 'Hello, I like you'
  68. }).catch(function(reject) {
  69. // say 'Hello, good bye'
  70. });
  71. ```
  72.  
  73. နမူနာအရ `check()` Function သည် `Promise` Object တစ်ခုကို `return` ပြန်ပေးသည်။ ၄င်း `Promise` Object ၏ Callback Function က အခြေအနေပေါ်မူတည်၍ `resove` (သို့မဟုတ်) `reject` ကို အလုပ်လုပ်ပေးသည်။ `check()` Function ကို ခေါ်ယူသည့်အခါ ၄င်း Function အလုပ်လုပ်၍ပြီးအောင် စောင့်ရန်မလိုပဲ `then()` Function ဖြင့် `resolve` ဖြစ်လျှင် ဆက်လက် ဆောင်ရွက်ရမည့် အလုပ်ကို သတ်မှတ်နိုင်ပြီး `catch()` Function ဖြင့် `reject` ဖြစ်လျှင် ဆက်လက်ဆောင်ရွက်ရမည့် အလုပ်ကို သတ်မှတ်နိုင်ပေသည်။
  74.  
  75. ရှုပ်ထွေးလှသည့် သဘောသဘာဝ မဟုတ်သော်လည်း `Promise`, `resolve`, `reject`, `then` စသည့် နားလည်ရခက်သည့် အသုံးအနှုံးများကြောင့် မျက်စိလည်ချင်စရာ ကောင်းလှသည်။ မျက်စိလည်သွားလျှင် သင်တစ်ယောက်တည်းမဟုတ်၊ အခြားသူများလည်း လည်ကြသည်ဟု မှတ်ပါလေ။ လည်လက်စနှင့် `then()` ၏ အတွဲလိုက် အသုံးပြုနိုင်ပုံကို ဆက်လက်လေ့လာကြည့်ပါ။
  76.  
  77. ```javascript
  78. check().then(function(resolve) {
  79. return 'Hello, I like you';
  80. }).then(function(resolve) {
  81. // say ${ resolve }
  82. }).catch(function(reject) {
  83. // say 'Hello, good bye'
  84. });
  85. ```
  86.  
  87. ပထမ `then()` က `return` ပြန်ပေးလိုက်သော တန်ဖိုးကို ဒုတိယ `then()` က ဆက်လက်အသုံးပြုသွားခြင်း ဖြစ်ပေသည်။
  88.  
  89. ဤမျှမကသေး။ ES7 ခေါ် နောက်တစ်ဆင့် ထပ်တက်သွားသည့် စနစ်တွင် `async` `await` ခေါ် Asynchronous ကုဒ်များ ရေးသားနိုင်သည့် ရေးထုံး ထပ်မံပါဝင်လာပြန်သည်။
  90.  
  91. ```javascript
  92. function check() {
  93. // walk to her
  94. // status = check her out
  95.  
  96. return new Promise(function(resolve) {
  97. if(status.cute) {
  98. resolve('Hello, I like you');
  99. }
  100. });
  101. }
  102.  
  103. async function greet() {
  104. var result = await check();
  105. // say ${ result }
  106. }
  107.  
  108. greet()
  109. ```
  110.  
  111. နမူနာအရ `check()` Function သည် `Promise` ကိုပင် `return` ပြန်ပေးသည်ကို သတိပြုရမည်။ သို့သော် `then()` `catch()` ရေးထုံးအစား `async` Function ရေးထုံးကို ပြောင်းလဲအသုံးပြုထားသည်။ `var result = await check()` ၏ အဓိပ္ပါယ်မှာ `check()` Function အလုပ်လုပ်၍ ပြီးအောင်စောင့်ပြီးမှ ၄င်းအောက်ရှိ ကျန်ကုဒ်များ ဆက်လက်အလုပ်လုပ်မည့် သဘောပင်ဖြစ်သည်။ `result` ၏ တန်ဖိုးမှာ Promise `resolve` မှ ပြန်ပေးသည့် တန်ဖိုးဖြစ်ပေမည်။ စောင့်ပြီးမှ ဆက်လက်သည့်အတွက် Synchronous ဖြစ်မနေဘူးလား? မဖြစ်ပါ။ `greet()` Function ကြေငြာစဉ်က `async` ဟု ပြောထား၍ Function ထဲကကုဒ်များ Synchronous ဖြစ်နေသော်လည်း ၄င်း Function ကိုယ်တိုင်ကမူ Asynchnorous ဖြစ်နေပေသည်။ သူကို ကျန်လုပ်ဆောင်ချက်များက စောင့်ရန်မလိုပဲ ဆက်လက် အလုပ်လုပ်နိုင်ပေတော့သည်။
  112.  
  113. **ရှုပ်ထွေးလှပါပေစွတကား...**
Add Comment
Please, Sign In to add comment