const asynchronousCode = async ( ) => {
const a = await step1 ( ) ;
const b = await step2 ( a ) ;
const c = await step3 ( b ) ;
return a + b + c ;
}
try-catch
を含めた場合の async-await
の書き方
const asynchronousCode = async ( ) => {
let a ;
let b ;
let c ;
try {
a = await step1 ( ) ;
} catch ( error ) {
handle ( error ) ;
}
try {
b = await step2 ( a ) ;
} catch ( error ) {
handle ( error ) ;
}
try {
c = await step3 ( b ) ;
} catch ( error ) {
handle ( error ) ;
}
return a + b + c ;
}
const betterAsynchronousCode = async ( ) => {
const a = await step1 ( ) . catch ( err => handle ( err ) ) ;
const b = await step2 ( a ) . catch ( err => handle ( err ) ) ;
const c = await step3 ( b ) . catch ( err => handle ( err ) ) ;
return a + b + c ;
}
標準エラー処理(Standardize Error Handling)化した処理を書く場合
// 標準エラー処理化させたtry-catchの処理
// 正常に処理されたら、dataとnullを返す
// 例外処理されたら、nullとerrorを返す
const standadizedHandle = async ( ) => {
try {
const data = await somePromise ;
return [ data , null ] ;
} catch ( error ) {
console . error ( error ) ;
return [ null , error ] ;
}
}
// 標準エラー処理を使うときの書き方
// 返り値を分割代入して、例外発生時の処理を追加する
const asynchronousCode = async ( ) => {
const [ data , error ] = await standadizedHandle ( ) ;
if ( error ) handle ( error ) ;
const [ data2 , error2 ] = await standadizedHandle ( ) ;
if ( error2 ) handle ( error ) ;
const [ data3 , error3 ] = await standadizedHandle ( ) ;
if ( error3 ) handle ( error ) ;
}
Async Await try-catch hell