JavaScript
1const express = require('express'); 2const router = express.Router(); 3 4router.get('/users', (req, res, next) => { 5 (async () => { 6 7 const id = req.params.id; 8 if (!id) { 9 // throw で投げられた error も catch できる 10 throw new Error('Params not found'); 11 } 12 13 // 通常の reject も catch できる 14 const user = await getUser(id); 15 res.status(200).json(user); 16 17 })().catch(next); 18}) 19 20module.exports = router;
Expressの非同期処理について調べていたところ、上記のようなコードを見かけたのですが、catch(next)
でエラーハンドリングができる仕組みがよくわかりません。
参考にした記事によると、
「async 付きの即時関数で囲むことで、非同期例外を catch できるようになる
そこで nextFunction を渡してやれば、catch された error が nextFunction の引数に渡されて実行されるので、 Express のエラーハンドリングで処理することができる」とのことです。(https://qiita.com/yukin01/items/1a36606439123525dc6d))
next関数は次のミドルウェア関数を実行するためにnext()
という形で使われるものだと思っていたのですが、next関数自体を引数に渡すとき何が起こっているのでしょうか?
あなたの回答
tips
プレビュー