Node.js පසුබැසි සේවා හෝ දිගුකාලීන වැඩකාරකයන්හි, කාලයක් කිසිදු ගැටළුවක් නොමැතිව කාර්යයන් සම්පූර්ණ කරන අතර, හදිසිව සේවාව නවතී යන අත්දැකීමක් ඔබට සිදු වී තිබේද?
මෙවැනි අවස්ථා බොහෝවිට Unhandled Promise Rejection (අසමත් ප්රොමිස් ප්රතික්ෂේප) නිසා සිදුවේ. ප්රොමිස් එකක් අසාර්ථක වීමේදී, එය rejected තත්ත්වයට යයි. ඒ සමඟ එහි දෝෂ හේතුවක් (Error object) ගෙන එයි. එම ප්රොමිස් සඳහා .catch() හෝ .then() හි දෙවැනි පරාමිතියක්, හෝ await සමඟ try/catch එකක් නොමැති නම්, එම ප්රතික්ෂේපය “අසමත්” ලෙස සලකනු ලැබේ.
සමහර විට ඔබ doSomething().then(handleSuccess) ලෙස සාර්ථක පාරිභෝගිකයෙක් එක් කර තිබුණා වුවත්, දෝෂ මාර්ගයක් සපයන .catch() එකක් නොමැති නම්, එම ප්රොමිස් අසමත් ලෙසින් පෙනේ. එසේම, async function එකක් await නොකර හෝ .catch() නොලැබේ නම්, එය නරඹන කෙනෙකු නැත; එය ප්රතික්ෂේප වූ විට Node.js එය හසුරුවා නොගනී.
සාමාන්ය HTTP ඉල්ලීම් වල, අසමත් ප්රොමිස් එකක් වැරදි පිළිතුරක් (500) ලෙස පෙන්වීමට හෝ ඉල්ලීම් කාලය ඉකුත් වීමට පමණක් සීමා වේ. නමුත් පසුබැසි වැඩකාරක, කාර්ය පෝරම, WebSocket සේවා වැනි දිගුකාලීන ප්රොසෙස් වල, එම අසමත් ප්රොමිස් එක සේවාව පූර්ණයෙන්ම බිඳ දැමීමට හේතු වේ. එවිට එකවර බොහෝ කාර්යයන් අත්හිටුවනු ලබයි, මතකයේ පවතින පෝරම ඉවත් වේ, දත්ත ගබඩා, ගොනු හෝ lock වැනි සම්පත් අස්ථිර තත්වයකට පත්වේ.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තාක්ෂණික ව්යාපාර, SaaS සමාගම් සහ විශ්වවිද්යාල සිසුන් සඳහා මේ තත්ත්වය වැදගත් වේ. නමුත්:
- සිසුන් – Node.js පාඨමාලා හදාරන විද්යාලීය සිසුන්ට, ප්රොමිස් හසුරුවීමේ වැරදි අවධාරණය කරගැනීමට අවශ්යය.
- ඩිවෙලොපර්ස් – දිගුකාලීන සේවා නිර්මාණය කරන විකසකයන්ට, process.on('unhandledRejection') හෝ global error handling යෙදවීම අත්යවශ්ය වේ.
- ව්යාපාර – සේවා බිඳවැටීමෙන් පාරිභෝගික විශ්වාසය හා ආදායමට අධික බලපෑමක් ඇති වන බැවින්, නිවැරදි ලොග් කිරීම, alerting සහ automated restart (PM2, Docker) යෙදවිය යුතුය.
ඉදිරි කාලයේ Node.js සංස්කරණ 15+ සිට, අසමත් ප්රොමිස් එකක් සිදුවූ විට process එක ස්වයංක්රීයව නතර වේ. එබැවින්, සංවර්ධකයන්ට “fail fast” ප්රවේශය අනුගමනය කර, ඒවා පසුගිය වසරේ අත්දැකීම් මත නිවැරදිව හසුරවන්න අවශ්යය.
අවසන් වශයෙන්, ඔබේ Node.js යෙදුම්වල අසමත් ප්රොමිස් හසුරුවීමේ පරික්ෂාව, ලොග් කිරීම හා alerting ක්රමය නිවැරදිව සැකසීම, සේවාවන්ගේ විශ්වාසනීයතාවය රැක ගැනීමට මූලික පියවර වේ.