🌟
UnhandledPromiseRejection: (Node.js15から出現したエラー)
この記事でやること
とりあえず、エラーを解消するだけの解説になります。
色々複雑な説明があると思うのですが、初めてNode.jsを触る方が挫折しないために、とりあえずエラーをなくす方法のみを解説します。
エラー文
UnhandledPromiseRejection:
This error originated either by throwing inside of an async function without a catch block,
or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".
エラー分の内容から、Promiseでreject()が返された時に、それを.catch()で受け取っていないからエラーが出ているみたい。
解決策
解決策は簡単で、Promiseオブジェクトを使用している関数を参照している処理に、.catch()を記載する。
getUser()という関数でPromiseオブジェクトを使用している場合、それを参照しているgetUser()を、
以下のようにしてください。
getUser().catch((code) => { console.error("error:" + code); })
これは一旦エラーをなくすための処理ですが、本来は、.catchを使ってエラー処理などを行なっていけると良いと思います。
コード例
app.post('/api/v1/users', async (req, res) => {
const db = new sqlite3.Database(dbPath)
// SELECT文で、存在しないhogehogeというカラムを設定し、SELECTが失敗するようにする
await run('SELECT id, name, birthday, hogehoge FROM Users')
// 成功時のresolve()を受け取る
.then((code) => { console.log("normal:" + code); })
// 失敗時のreject()を受け取る
//この処理がないとUnhandledPromiseRejection: が発生する。
.catch((code) => { console.error("error:" + code); })
db.close()
})
const run = async (sql) =>{
return new Promise((resolve, reject) =>{
db.run(sql, (err) =>{
if(err){
res.status(500).send(err)
return reject()
}else{
res.json({message:message})
return resolve()
}
})
})
}
ただこれを直しても他のエラーが出ます
このエラーは、何かしらの処理が失敗(reject)された時に、発生しているので、このエラーが改善しても、そもそも処理が失敗している可能性が高いので、そこは頑張って治してください。
詳しく知りたい方は
以下の記事が参考になるので、みてみてください。
Discussion