技術ブログ株式会社エーピーコミュニケーションズの技術ブログです。エーピーコミュニケーションズの技術ブログです。>はじめに先進サービス開発事業部の高橋です。JavaScriptの非同期処理の終了タイミングを計るという行為は少し癖があって扱いにくい印象がありましたが、ES2017から追加されたasync/awaitを使うとかなり楽に実装できるようになりました。そこで、複数の連続する非同期処理を一纏まりの処理として扱い、途中で失敗したときには差し戻しを行うと行った、RDBでいうところのトランザクションのような処理をJavaScriptで実装する方法について記載します。Promiseまず、非同期で処理を行う関数でPeomiseのインスタンスを返します。Peomiseには非同期処理の終了、もしくは失敗の結果が入ります。インスタンスの初期化をする際にコンストラクタの引数にexecutor関数を定義することができます。executor関数では成功した時の値をセットするresolve関数と、失敗した際の値をセットするreject関数を引数に取ることができます。await次に、Promiseを返す関数を受け取る側の関数を定義します。この関数でasync/awaitを用いて非同期処理の終了タイミングを取得しつつ、try...catchで例外(エラー)のハンドリングを行います。}};Promiseを返す非同期処理でreject関数がコールされた場合には、例外(エラー)がスローされた形となり、以降の処理を中断しcatchブロックのスコープに入ります。サンプルコード簡単なサンプルを作成しました。処理内容は以下の通りですA、B、Cという3種類の非同期処理を実行するAは1000ミリ秒後に遅延実行される処理Bは500ミリ秒後に遅延実行される処理Cは250秒後に遅延実行される処理Aが終了したらB、Bが終了したらCという順番を守らせるいずれかの処理が失敗すると、以降の処理を行わない処理の失敗時にはロールバックするJSFiddleにも動作を確認できるサンプルを置いてあります。テキストを挿入します。逆に途中で失敗したときには、以降の処理をやめ、挿入されたテキストも削除します。このサンプルでは非同期処理の例としてsetTimeoutを使っており、基本的に失敗は起こりえないため、引数の値を見て擬似的に失敗を引き起こすということをしています。Engineeringの導入支援、データ&AI基盤に関連するサービスを提供しています。わたしたちは「エンジニアとお客様を笑顔にする」というVisionを掲げ、インフラエンジニアの未来を創るNeoSIerとして工夫と挑戦を行い続けます。読者になるこのブログについて引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。