#nodejs_api
Сьогодні ми обговоримо, що робити з помилками, у яких stack trace закінчується
at processTicksAndRejections (node:internal/process/task_queues)Багато популярних пакетів викидають помилки таким чином, що stack trace обривається у коді самого пакета. Це ускладнює відлагодження таких виключень, оскільки втрачається стек викликів у коду додатка. Нажаль, у багатьох випадках контрибутори пакетів відхиляють запити на виправлення цієї проблеми. Приклади:
- Improve axios stack traces axios/axios#2387
- Missing stack trace on errors stripe/stripe-node#1066
Якщо пакет популярний, то ком'юніті запропонує якісь рішення. Наприклад axios-better-stacktrace.
Загальним рішенням є використання try-catch та викидати нову помилки з
cause. Нагадую, що ми маємо Error: cause з Node v16.9.0. Для цього я використовую такий хелпер:export function reThrow(reason: unknown, errorConstructor: ErrorConstructor = Error): never { const errorMessage = reason instanceof Error ? reason.message : errorConstructor.name; const error = new errorConstructor(errorMessage, { cause: reason }); Error.captureStackTrace(error, reThrow); throw error;}Error.captureStackTrace(... видаляє з stack trace рядки хелпера.Приклад використання:
const session = await stripeClient.billingPortal.sessions.create({customer: ''}).catch(reThrow);