Graceful degradation — continue working with reduced functionality when dependencies fail.
1class DegradationStrategy {2 constructor() {3 this.fallbacks = new Map();4 }56 register(service, fallbackFn) {7 this.fallbacks.set(service, fallbackFn);8 }910 async call(service, primaryFn, ...args) {11 try {12 return await primaryFn(...args);13 } catch (err) {14 console.error(`${service} failed:`, err.message);15 const fallback = this.fallbacks.get(service);16 if (fallback) {17 return fallback(...args);18 }19 throw err;20 }21 }22}2324// Setup25const degradation = new DegradationStrategy();2627degradation.register("recommendations", (userId) => {28 return getPopularProducts(); // fallback to popular29});3031degradation.register("reviews", (productId) => {32 return { average: 0, count: 0 }; // empty reviews33});3435// Usage36app.get("/products/:id", async (req, res) => {37 const product = await degradation.call(38 "recommendations",39 (userId) => getPersonalizedRecommendations(userId),40 req.user.id41 );42 res.json({ product, recommendations: product });43});