峻行Promiseとasync/awaitを用いたJavaScriptの非同期処理について記述していきたいと思います。JavaScriptでは外部サーバと情報をやり取りする際に非同期処理を行います。従来JavaScriptではコールバックを用いて非同期処理を行っていました。このコールバックというものは、なかなかの曲者で多くの問題を抱えています。問題は連続で非同期処理を行う際です。以下のようなケースです。salesforce組織にログイン認証を行う取引先の住所を取得する取引先の住所から、最寄りのレストランの情報を取得する画像を読み込む画像をリサイズし描画する上の1~5の処理は全て一つ一つ順番に処理をしなければならない非同期処理です。コールバックのみで記述しようとすると、上記のケースではどうしても処理全体をまとめてテストしなければならなくなります。ES6、ES7で登場した新しいAPI、Promiseとasync/awaitを用いると非同期処理を一つ一つテストができるようになります。仕様変更によるテストの修正やバグの発見がスムーズになると思います。コールバックのみの場合よりもネストを浅くできます。可読性や保守性の向上に繋がると考えています。以下は実際に連続した非同期処理をコールバックで記述した場合のサンプルソースになります。});});関数同士が密につながっています。非同期処理一つずつテストを行うことができず、関数全体で一度に行うことしかできません。これに対してPromiseとasync/awaitを使った場合どうなるのでしょうか。以下がそのソースです。エントリポイントexecAll(name);コードの量は残念がら増えてしまいました。非同期処理ごとに関数が記述されているため、1つ1つばらばらにテストができるようになりました。見かけない記述の仕方がされていますので簡単に説明します。});}resolve()の引数として渡した値が戻り値になります。getAddress(name);であればretが戻り値になります。reject()が呼び出されるとその引数がcatchに渡されます。この場合はerrです。login()のようにawaitと関数の前に記述します。awaitを含む関数のfunctionの前にはasyncと記述する必要があります。今回はES6,7の新しいAPIを用いた非同期処理の方法を記述してみました。JavaScriptの機能は凄い速度で拡張されています。中には使い勝手の悪い機能や数年のうちに消えてしまう機能も存在します。今回説明したPromiseとasync/awaitのように興味深い機能もたくさんあります。前述のBabelを使って色々と試してみるのも面白いのではないでしょうか。※注意※ソース2は現状、一部のブラウザでしか実行することができません。対応ブラウザを増やすことができるツール「Babel」を使って変換したコードを実際には使うことになります。関連する記事TerraSkyBaseについてTerraSkyBaseはクラウドサービスを手掛ける株式会社テラスカイのコンテンツプラットフォームです。