Promise によってコードは整理されましたが、まだ.then()といった独特な書き方が必要です。
async/await を使えば、非同期処理をまるで「普通の同期処理」のように、上から下へ順番に書くことができます。
前章のコールバック地獄や、Promise のチェーンに比べて、処理の順番が一目でわかります。
現在の現場では、この書き方が最も一般的です。
async(エイシンク)
非同期処理を含む関数に付けるキーワードです。
await(アウェイト)
Promise の完了を待つキーワードです。Promise の結果が出るまで、その行で一時停止します。
10.2.1 async/await を使用したプログラム
前の項の処理が async/await を用いると、一層シンプルに記述できるのを確認しましょう。
ソースフォルダ:public/ch10
ファイル名:async-await.js
➢ async-await.html
前の章で作った ch10/delay2.html をコピーし、ch10 にペーストしてください。
その際に、ファイル名を async-await.html に変更します。
ファイル内の delay2.html や delay2.js の記述も、async-await.html や async-await.js に修正します。
➢ async-await.js
// async-await.js
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 非同期関数を定義します
async function runTask() {
alert("処理を開始します。");
await delay(1000); // 1秒待つ(終わるまで次に行かない)
alert("1秒経過しました!");
await delay(2000); // さらに2秒待つ
alert("さらに2秒経過して、すべての処理が終わりました。");
}
runTask();
実行結果

解説
今回のサンプルは、一つ前の delay2.js とほとんど変わりませんが、async と await の2つのキーワードのおかげで、よりシンプルに記述できるようになりました。
await キーワードは、async キーワードを用いた function の中でしか使えないことに注意してください。
7: // 非同期関数を定義します
8: async function runTask() {
9: alert("処理を開始します。");
10:
11: await delay(1000); // 1 秒待つ(終わるまで次に行かない)
