Asynchronous problem in Node.js

Node.js ကို သုံးနေရင်းသိလာတာက Node.js က Asynchronous ဖြစ်တာကို သိလာတယ်။ Asynchronous ဆိုတော့ ရေလည်မိုက်တာပေါ့ လို့ တွေးထင်ကောင်း ထင်ပါလိမ့်မယ်။ သို့ပေမယ့် ပြဿနာလေးတွေက ရှိလာပြန်ကော။ ပြဿနာ မပြောခင် asynchronous ကြောင့် ကောင်းတာလေးတွေ ရှိပါတယ်။ Database ဖတ်နေတာကို တောက်လျှောက် စောင့်ပြီး တခြားဘာမှ မလုပ်နိုင်ပဲ ဖြစ်နေတာမျိုးတွေ မဖြစ်တော့ဘူးပေါ့။ Asynchronous ကောင်းကျိုးကို ကျွန်တော်တို့ jquery မှာ ajax တွေ မှာ တွေ့ခဲ့ပြီးပါပြီ။ ထွေထွေထူးထူး ပြောစရာ မရှိပါဘူး။

သို့ပေမယ့် Node.js မှာ ပြဿနာလေး ရှိပါတယ်။ ဒီ code လေးကို တချက်ကြည့်လိုက်ပါ။

အဲဒီ code ကို ကြည့်လိုက်ရင် မှန်တယ်လို့ ထင်ရတယ်။ သို့ပေမယ့် တကယ် run လိုက်ရင် result က အောက်ကလို ဖြစ်သွားတယ်။


i က 100 ပြီးသွားမှ insert function ထဲကို ရောက်သွားတာကို တွေ့ရပါလိမ့်မယ်။

ဒါဟာ node.js မှာ closure callback ပုံစံ ရေးထားလို့ပါ။ k variable ကို reference by လုပ်ထားတဲ့ အတွက်ကြောင့် ဖြစ်သွားတာပါ။ ဒါကြောင့် k variable ကို Value by ဖြစ်အောင် ရေးထားပေးဖို့လိုပါတယ်။ အဲဒါကို ကျွန်တော်တို့ ဒီလို ပြင်ရေးရပါတယ်။

function တစ်ခု ဖန်တီးပြီးတော့ k ကို ထပ်ပို့ထားတာကို တွေ့ရပါလိမ့်မယ်။ တနည်းပြောရင် k ကို by value parameter ဖြစ်အောင် ဖန်တီး လိုက်တာပါ။ အဲဒီ အခါ looping က k နဲ့ သွားပြီးတော့ ပြဿနာ မဖြစ်တော့ပါဘူး။

နောက်ထပ် code တစ်ခုကို ကြည့်ရအောင်

CSV file ကို ဖတ်တယ်။ ပြီးတော့ database ထဲ မထည့်ခင် ရှိမရှိ စစ်တယ်။ မရှိဘူးဆိုရင် ထည့်တယ်။ လွယ်လွယ်နဲ့ ရှင်းရှင်းလင်းပါပဲ။ အဲဒီ အတိုင်းသာ run လိုက်ရင်တော့ အောက်ကလို message တွေ့ရမှာပါ။

ဘာလို အဲလို message ပေါ် ရတာလဲဆိုတော့ ကျွန်တော်တို့တွေ database ကို insert မလုပ်ခင် စစ်တယ်။ စစ်တဲ့ အဆင့်တွေ အားလုံး ပြီးသွားတာနဲ့ connection ကို ပိတ်လိုက်ကော။ ပိတ်လိုက်တော့ insert က မရတော့ဘူး။ insert လုပ်ဖို့ကလည်း ဘယ်အချိန်မှာ connection ပိတ်ရမှန်း မသိ စတဲ့ ပြဿနာ တက်လာပါကော။

အဲဒီ ပြဿနာမျိုးတွေကို ဖြေရှင်းဖို့ async module ကို သုံးပြီး ဖြေရှင်းရပါတယ်။ လုပ်ချင်တဲ့ list တွေ အားလုံးကို object ထဲမှာ push လုပ်ပြီးတော့ အကုန်လုံးကို ပြီးမှ async library နဲ့ ပြန်ထုတ်ပြီး အလုပ်လုပ်စေတာပါ။ အဲဒါကို ဒီလိုလေး ရေးထားပါတယ်။

တနည်းပြောရင် node.js က javascript တော့ javascript ပဲ။ ဒါမှပေမယ့် မတူညီတဲ့ javscript idea ပုံစံနဲ့ ရေးရတာကို တွေ့နိုင်ပါတယ်။ စလုပ်ကာစမှာတော့ တိုင်တွေ ပတ်ပြီး နောက်ဆုံး ကိုယ့်ဘာသာကိုယ် မရှင်းနိုင်တဲ့ အဆင့်လည်းရောက်ကော stackoverflow မှာ မေးမှပဲ ရှင်းသွားပါတော့တယ်။

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.