JavaScriptの同期処理と非同期処理の方法を現役エンジニアが解説【初心者向け】

初心者向けにJavaScriptの同期処理と非同期処理の方法について解説しています。同期処理は順番に処理していく形になりますが、非同期は異なります。コールバックとは例えば電話をかけて不在だった場合に、留守番電話に用件を録音しておくような形になります。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

JavaScriptの同期処理と非同期処理の方法について解説します。実際のコードをもとに解説していきますので、理解を深めていきましょう。

また、入門向けのJavaSriptを学習できるサイトも紹介しているので、合わせてご覧ください。

 

なお本記事は、オンラインブートキャンプ フロントエンドコース(JavaScript・jQuery講座)の内容をもとにしています。

 

田島悠介

今回は、JavaScriptに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

同期処理と非同期処理の方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

同期処理と非同期処理とは

同期処理とは、プログラムの記述順に処理を行い結果が返ってくる方式です。それに対して非同期処理は、処理が終わったタイミングで結果が返ってくるなど、プログラムの記述順とは異なる処理順となる方式です。

なお、JavaScriptはシングルスレッド(同時に1つの処理しか行えない)であるため、非同期処理であっても並行処理(同時に複数の処理を行う方式)では無い点に注意が必要です。

 

同期処理と非同期処理の方法

JavaScriptで非同期処理を制御するにはPromiseオブジェクトを使用します。 Promiseオブジェクトを使用すると、非同期処理の成功や失敗を受け取り、処理を行うことができます。

完了や失敗を受け取って行う処理をコールバックと呼びます。Promiseを返す非同期処理へのコールバックは以下のように記述します。

doSomething().then(successCallback, failureCallback);

successCallbackが成功時のコールバック、failureCallbackが失敗時のコールバックです。Promiseオブジェクトの使い方について、詳しくは以下の記事を参考にしてください。

mozilla.org-Using_promises

mozilla.org-Promise

 

[PR] JavaScript・jQueryで挫折しない学習方法を動画で公開中

実際に書いてみよう

今回のサンプルプログラムでは、Promiseを利用して非同期処理の結果を受け取り処理を行います。実行結果はコンソールに表示されます。なお、サンプルプログラムは以下のサイトを参考に作成しました。

mozilla.org-Promise#Basic_Example

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>sample</title>
</head>
<body>
  <script language="javascript" type="text/javascript">
  function asyncFunc1() {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        // 成功
        resolve('asyncFunc1成功しました!');
        // 失敗
        //reject('asyncFunc1失敗しました!');
      }, 3000);
    });
  }

  // 非同期処理の呼び出し
  asyncFunc1().then(function (value) {
    console.log("ok:", value);
  }, function (value) {
    console.log("error:", value);
  });
  </script>
</body>
</html>

実行結果は以下のようになります。非同期処理が終わったタイミングでコンソールに結果が出力されます。

 

筆者プロフィール

太田和樹(おおたかずき)

ITベンチャー企業のPM兼エンジニア

普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。

開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント

地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

また、TechAcademyではJavaScriptを使ってWebサービスを公開できるオンラインブートキャンプ フロントエンドコース(JavaScript・jQuery講座)を開催しています。

プログラミングの初心者でも受講可能です。Webサイトの表現の幅を広げたいという方はぜひご覧ください。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。