JavaScript ප්රෝජෙක්ට් එකක දෝෂයක් හම්බවූ විට, බොහොමයක් වෙලාවට අපි එය අල්ලා පසුදා අර්ථවත් පණිවුඩයක් එක්ක නැවත උත්පාදනය කරමු. එහිදී මුල් දෝෂයේ stack trace සහ විස්තර අතුරුදහන් වීම සාමාන්ය සිදුවීමක්.
උදාහරණයක් ලෙස, API එකකින් පරිශීලක තොරතුරු ගන්නා async function එකක් ගැන හිතන්න. සර්වර් 403 ආදී පිළිතුරක් ලැබුණොත්, අපි throw new Error(`Failed to load user ${id}`) කියලා නව දෝෂයක් දාලා එය උත්පාදනය කරමු. මෙතැනින් ලොග් එකේ “Failed to load user 42” කියලා පණිවුඩයක් පමණක් දැක්වේ, මූලික හේතුව කුමක්දැයි කිසිවක් නොදැනගත හැක.
ES2022 නවීකරණය මෙම ගැටලුවට විසඳුමක් ගෙන එයි. Error සම්පාදකයට දෙවැනි argument එකක් ලෙස { cause: originalError } යන options object එක ලබා දිය හැක. මෙයින් නව දෝෂය මුල් දෝෂය err.cause ලෙස සුරක්ෂිත කරයි.
උදාහරණය:catch (err) { throw new Error(`Failed to load user ${id}`, { cause: err }); }
ඉන්පසු උත්පාදනය කරන පාර්ශවය err.message සහ err.cause.message දෙකම කියවිය හැක, එමෙන්ම මුල් stack trace එකත් අඛණ්ඩව පවතී.
පෙර පැරණි ක්රමය වූ “message concatenation” පමණක් පණිවුඩය එකතු කරයි, stack trace හෝ error type අතුරුදහන් වේ. Error.cause භාවිතා කිරීමෙන් error chain එකක් ගොඩනගා, එක් එක් ස්ථරයේ සන්දර්භය රැඳී පවතී.
උදාහරණයක් ලෙස සේවා ස්ථරයක් (service layer) තුළ API ඇමතුම් අල්ලා, throw new Error('UserService.getUser failed', { cause: err }) ලෙස නව දෝෂයක් උත්පාදනය කළහොත්, ඉහල මට්ටමේ දෝෂ පණිවුඩය සමඟ පසුබැසි HTTP 403, ECONNREFUSED වැනි තොරතුරු අහිමි නොවෙයි. ලොග් පද්ධතිය .cause චේන් එක අඩංගු කරගෙන structured log එකක් සකස් කළ හැක, Sentry වැනි monitoring tool එකක් සමඟ සම්පූර්ණ error tree එක පෙන්විය හැක.
TypeScript 4.6 සිට ErrorOptions type එකට cause ක්ෂේත්රය එක් කර ඇත. එය unknown ලෙස typed කර ඇති බැවින්, කිසිම වර්ගයක් cause වශයෙන් භාවිතා කළ හැක. ඔබේ custom error class එකක් තුළද options object එක super() වෙත යවා this.cause ස්වයංක්රීයව සකස් වේ.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලාංකීය සංවර්ධකයන්ට මෙය අත්යවශ්යයි. පාඨමාලා, bootcamps, සහ විශ්වවිද්යාල කෝඩ් ලැබ් වලදී error handling ගැන සාධාරණ උදාහරණයක් ලෙස භාවිතා කළ හැක. එමඟින් නවකයන්ට debugging කුසලතා ඉක්මනින් වර්ධනය කර ගත හැකි අතර, ව්යාපාරික පද්ධතිවල production දෝෂයන් හඳුනා ගැනීමේ කාලය අඩු කරයි. එසේම, ශ්රී ලංකාවේ SaaS හා fintech සමාගම් error monitoring tool සමඟ Error.cause භාවිතා කර, පාරිභෝගික සේවාවන්හි විශ්වාසය වැඩි කර ගැනීමට උපකාරී වේ.
එබැවින්, ඔබේ JavaScript/TypeScript පදනමට Error.cause එකතු කර, දෝෂ පසුබැසි තොරතුරු අහිමි නොවී, වැඩි දක්ශතාවයක් සහිත සංවර්ධන පාරිසරිකයක් ගොඩනගන්න.