メインコンテンツまでスキップ

非同期処理

もしJavaScriptで本格的に何かを作りたいのであれば、非同期処理とは切っても切れない関係になるでしょう。初めのうちは理解に苦しむことが多いですが今では非同期処理を直観的に操作できる機能が実装されたのでハードルは大きく下がりました。

JavaScriptにおける非同期処理

JavaScriptはシングルプロセス、シングルスレッドで動作する言語です。この特徴については別のページにもありますが、これはすべてのプログラムは直列に処理されるということを意味します。

📄️ シングルプロセス・シングルスレッドとコールバック

コンピューティング。特に並列、並行処理をするプログラミングに入ってくるとプロセス、スレッドという言葉を耳にするようになります。

これだけ聞けばすべてのJavaScriptのプログラムは上から下に同期的に処理されるようにも聞こえます。
ですがこの特徴には弱点があります。直列に処理されるため時間のかかる処理があるとその間は他の処理が実行されません。たとえばAPIリクエストの場合処理の大部分は待ち時間ですが、この待ち時間も直列に処理されるとその間は何もできないことになってしまいます。これをブロッキングといいます。
この問題を回避するためにJavaScriptではノンブロッキングを扱います。ノンブロッキングでは処理を受けたあと即座に処理を返し、あとで別の方法で結果を伝えます。この方法をコールバックと呼ぶこともあります。コールバックの言葉は折り返しの電話を意味します。

Promiseの誕生

JavaScriptにおける非同期処理にはコードの見通しが悪くなる(コールバック地獄)という弊害があります。ES2015から追加されたPromiseはその打開策ともいえ、JavaScriptのコードをコールバック地獄から解き放ちました。
そしてそのPromiseをさらに使いやすくするためにasync/awaitがES2017で追加されました。

本章で取り上げる内容について

本章ではこれらPromise/async/awaitの使いかたや特徴をそれぞれのページに分けて取り上げていきます。