TGViewer
JavaScript JavaScript @javascript · 31.1K subscribers
Post #3073 2.66K
CHALLENGE



class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.name = this.constructor.name;
this.statusCode = statusCode;
}
}

class ValidationError extends AppError {
constructor(message) {
super(message, 400);
this.fields = [];
}
}

function riskyOperation(value) {
if (value === null) throw new ValidationError("Null value");
if (value < 0) throw new AppError("Negative value", 422);
return value * 2;
}

const results = [];

for (const val of [10, null, -5, 3]) {
try {
results.push(riskyOperation(val));
} catch (e) {
if (e instanceof ValidationError) {
results.push(`Validation:${e.statusCode}`);
} else if (e instanceof AppError) {
results.push(`App:${e.statusCode}`);
} else {
results.push("Unknown");
}
}
}

console.log(results.join(" | "));
  • 👍 5
  • 🔥 2
  • 🤩 2
More from @javascript
  1. Sep 24, 2026Post #3516
  2. Sep 24, 2026CHALLENGE class Base { static count = 0; static increment() { this.count++; return this.co…
  3. Sep 23, 2026🤩 tinyjs: Build JavaScript Desktop Apps in <10MB I built an app with this and was impress…
  4. Sep 23, 2026Post #3513
  5. Sep 23, 2026CHALLENGE function* inner() { yield 1; yield 2; return 100; } function* outer() { const re…
  6. Sep 22, 2026Post #3511
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →