Node jsで始めるfilesystem8 async await error

javascript

async await の基本は非同期処理を同期処理のように書けるということでした。しかしエラー処理についてまで触れていません。promiseの場合メソッドチェーンにcatchをつなげてエラーをキャッチしていました。async,awaitのエラー処理はいくつかのやり方に別れます。おそらく最もわかりやすいのはtry catchで同期処理のようにキャッチする方法ではないしょうか。

いくつもの非同期処理関数を実行する場合もtry catchで括って一括で管理できます。Promiseがrejectを返した場合はそのままキャッチされるのでわかりやすい。勿論try内でエラーを普通にthrowした場合もキャッチされる。

しかし個別の非同期の処理にエラー処理を設けたい場合はチェーンメソッドでつなげられる。

ただしその後の処理はそのまま順に処理してしまうのでtryのように囲ったクロージャ内を一括でエラー処理する事はできない。しかも何かしら値を消す非同期処理ならエラーキャッチ後そのままだと何も返してくれない。

確かにエラーはキャッチできたが本来何かしら値を返してくれ関数に関しては返す値が何もないとその後の処理でさらにエラーを引き起こす原因になりかねない。これを回避するためにcatch内でreturnで値を返す事によりresolve時同様変数に返ってきた値を代入できる。これでエラーを回避できる。

awaitによるメソッドチェーンは細かなエラー処理が設定できるが通常何かしらエラーが発生した場合は処理全体を中断させると思うのでtry catcnの方が使いやすいだろう。ちなみにasync関数内のpromise関数がエラー返した時にtry catch等のエラーcatch処理を設定しなかった場合はどうなるだろう。

catchしないasync関数のメソッドチェーンでエラーとしてcatchしました。実はasync関数内でcatcnしない場合さらに関数の外にrejectして返します。async関数の中に呼ぶasync関数の場合このようにtry,catchで囲むことさえ省略してasync関数から外にrejectを飛ばしてさらに外のasync関数で受けることが可能です。

async関数内のasync関数で返したrejectをaync関数の外に返して外側のasync関数内でcatchする。ややこしいですが非同期処理にもエラーはつきものなので理解してゆきたいところです。

 

Beer 寄付してサイトを応援する。