JavaScript
// Method 1: Re-throw error
function level1() {
try {
level2();
} catch (error) {
console.error('Level 1 caught:', error.message);
throw error; // Re-throw
}
}
function level2() {
try {
level3();
} catch (error) {
console.error('Level 2 caught:', error.message);
throw error; // Re-throw
}
}
function level3() {
throw new Error('Error from level 3');
}
try {
level1();
} catch (error) {
console.error('Final catch:', error.message);
}
// Method 2: Wrap error
function processData(data) {
try {
return JSON.parse(data);
} catch (error) {
throw new Error(`Failed to process data: ${error.message}`);
}
}
try {
processData('invalid');
} catch (error) {
console.error('Wrapped error:', error.message);
}
// Method 3: Error chain
class ChainedError extends Error {
constructor(message, cause) {
super(message);
this.cause = cause;
this.name = 'ChainedError';
}
}
function operation1() {
try {
operation2();
} catch (error) {
throw new ChainedError('Operation 1 failed', error);
}
}
function operation2() {
throw new Error('Operation 2 failed');
}
try {
operation1();
} catch (error) {
console.error('Chained error:', error.message);
console.error('Caused by:', error.cause.message);
}
// Method 4: Error handling middleware
function errorHandler(error, context) {
console.error('Error in', context, ':', error.message);
// Log to service, send notification, etc.
}
function riskyOperation() {
try {
throw new Error('Operation failed');
} catch (error) {
errorHandler(error, 'riskyOperation');
throw error;
}
}Output
Level 3 caught: Error from level 3 Level 2 caught: Error from level 3 Level 1 caught: Error from level 3 Final catch: Error from level 3 Wrapped error: Failed to process data: Unexpected token i in JSON at position 0 Chained error: Operation 1 failed Caused by: Operation 2 failed Error in riskyOperation : Operation failed
Error propagation moves errors up call stack.
Re-throwing
- Catch and re-throw
- Preserve original error
- Add context if needed
Wrapping Errors
- Wrap in new error
- Add context
- Preserve original
Error Chains
- Link errors
- Track cause
- Full error history
Error Middleware
- Centralized handling
- Logging
- Notifications
Best Practices
- Re-throw when appropriate
- Add context
- Don't swallow errors
- Log properly