async/await error handling
code:javascript
const users = [
{id: '00001', name: 'Alice'},
{id: '00002', name: 'Bob'},
{id: '00003', name: 'Carol'}
]
const findUserById = async (id) => {
const user = users.filter(user => user.id === id)
if (user.length === 0) {
throw 'not found'
}
if (user.length !== 1) {
throw 'duplicated id'
}
return user0
}
const formatUserData = user => ID: ${user.id}, 名前: ${user.name}
const main = async (id) => {
const user = await findUserById(id).then(formatUserData)
console.log(user)
}
main()の実行結果(正常)
code:javascript
main('00001') // => ID: 00001, 名前: Alice
await.catch
code:javascript
const handleError = errorMessage => errorMessage.toUpperCase()
const main = async (id) => {
const user = await findUserById(id).then(formatUserData).catch(handleError)
console.log(user)
}
code:javascript
main('00004') // => 'NOT FOUND'
利点
呼び出し元はエラー気にしなくてok(そういうふうに作る)
欠点
そういうふうに作るのが難しいみたいな所ある
エラー起こしたとき何返せばいいの
そういう時のデフォルトデータあってそれ返せばいいならこの形式が良いかもね
呼び出し先でcatch
code:javascript
const handleError2 = errorMessage => console.log(error: ${errorMessage.toUpperCase()})
const main = async (id) => {
const user = await findUserById(id).then(formatUserData)
// rejectされたら以降のステップが実行されないことにも注目したい
console.log(user)
}
code:javascript
main('00004').catch(handleError2) // => error: NOT FOUND
利点
呼び出し元でエラー処理すればよしなのでasync本体が簡潔
返ってくるエラーに応じて呼び出し元が柔軟にエラー処理できる
利点・欠点で書いたけど正直使い分けなのでどっちが優れてる/劣ってるは無い