いまさら聞けない async と await って何?

async、await は同期・非同期を制御する修飾子

asnyc と await は、JavaScriptにおける連続した処理を「前の処理が終わってから後の処理を実行する」か、「前の処理が終了する前に後の処理を実行する」かを指定するためのキーワードです。

プログラミングでは、前者の処理方式を「同期処理」と呼び、後者の処理方式を「非同期処理」と呼びます。

非同期通信(Ajax)をざっくり復習

ウェブアプリ(ウェブサイトも含む)でサーバーとクライアント間の非同期処理を実装するには、JavaScriptを使います。これをAjax(Asynchronous JavaScript + XML)と呼びます。

Ajaxを実装するための手段として、ネイティブなJavaScriptにはXMLHttpRequestオブジェクト、jQueryには$.ajaxメソッドなどが用意されています。

開発をしている方なら、Ajax専用のJavaScriptライブラリaxiosを使っているかもしれません。 

「Ajaxって何?」という方は、Ajaxざっくり解説をお読みください。

async と await を使った処理イメージ

async と await を非同期処理の場面で使うと、処理の順番がどのようになるのかを簡単に解説します。

プログラム用語は英単語を短縮したものがほとんどなので、知らない用語に出会ったらGoogle翻訳で元々の意味を調べましょう。async は Asynchronous(=非同期)、await は「待つ」の意味です。

例1)

async function(){ 処理A } 
処理B
処理C

この場合、BとCは必ず順番に実行されますが、
Aは必ずしもBより先に実行されるとは限りません。

グループ1:処理A
グループ2:処理B+処理C

のように考えたとき、各グループ内の処理は順番通りに実行されますが、
グループ1とグループ2は非同期に実行されます。

例2)

async function(){
 処理A
 await 処理B
 処理C
}
処理D

この場合、たとえBが非同期型の処理だったとしても、
CはBの完了を待ってから実行されます。

これもグループ分けすると、

グループ1:処理A+処理B+処理C
グループ2:処理D

グループ1とグループ2は互いに非同期で実行されますが、
グループ1の中では必ずA→B→Cの順に実行されます。

もし、Bが非同期処理を含んでいた場合に
await をつけずに

async function(){
 処理A
 処理B
 処理C
}
処理D

としてしまうと、Bが終わる前にCが開始してしまいます。

同期・非同期の制御が重要な場面

会員専用サイトにおけるログイン認証や、ECサイトでの決済処理のように、

「成功してから次に進まなければ深刻な問題が起こりうる」

場合に、同期・非同期の制御が重要です。