# असिंक्रोनस एरर हैंडलिंग — एक्सप्रेस.जेएस

Source: https://www.geekswithgeeks.com/hi/expressjs/ex-async-errors

> असिंक्रोनस हैंडलर में फेंकी गई त्रुटियों को स्पष्ट रूप से आगे भेजना ज़रूरी है।

## एक ख़तरा

Express 4 में, `async` route हैंडलर के अंदर रिजेक्ट हुआ promise अपने-आप एरर हैंडलर तक **नहीं** पहुँचता — यह चुपचाप क्रैश हो जाता है या रिक्वेस्ट अटक जाती है।

## पकड़ें और आगे भेजें

बॉडी को `try/catch` में लपेटें और `next(err)` बुलाएँ — या दोहराव से बचने के लिए एक छोटा हेल्पर उपयोग करें।

```javascript
const asyncHandler = (fn) => (req, res, next) =>
  Promise.resolve(fn(req, res, next)).catch(next);

app.get('/users/:id', asyncHandler(async (req, res) => {
  const user = await db.users.findById(req.params.id);
  if (!user) {
    const err = new Error('User not found');
    err.status = 404;
    throw err;
  }
  res.json(user);
}));
```

## Express 5 इसे ठीक करता है

Express 5, async हैंडलर से रिजेक्ट हुए promise को अपने-आप `next(err)` तक भेजता है — Express 5 पर wrapper की ज़रूरत नहीं रहती।
