プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • JavaScript
  • 【JavaScript】非同期関数(「async」、「await」)について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【JavaScript】非同期関数(「async」、「await」)について

05.03

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

async、awaitとは?

非同期処理を記述できる文法で、Promiseをより簡潔に記述する事が可能になります。Promiseに関しては下記の記事で解説しております。

【JavaScript】非同期処理を簡単にし、コールバック地獄から脱出させる「Promiseオブジェクト」について

async、awaitの使い方

resolveメソッドで値を返すPromiseオブジェクトをthenを使わずにそのままデバッグしようとしたら下記のように空のPromiseオブジェクトが入っているだけになります。もちろん、thenを使えばresolveの値を取り出す事が可能ですが、async、awaitを使っても取り出す事が可能です。

1
2
3
4
5
6
let promise = new Promise(resolve => {
  resolve("テスト");
})
 
let a = promise
console.log(a); // Promise {}

下記のように関数の前にasync、promiseオブジェクトの前にawaitをつける事でthenを使わなくてもresolveにより返された値を取得できるようになりました。

1
2
3
4
5
6
7
8
9
let promise = new Promise(resolve => {
  resolve("テスト");
})
 
async function kansu() {
  let a = await promise
  console.log(a); //テスト
}
kansu();

このようにasync、awaitが適用された関数のことを非同期関数と呼びます。

async function

  • Promiseオブジェクトを返す関数(非同期関数)ということを指します。
  • 非同期関数ないでreturnするとresolveした結果を返します。

await [Promiseオブジェクトを返す関数]

  • 引数で指定した「Promiseオブジェクトを返す関数」がresolve、rejectするのを待ちます。
  • Promiseオブジェクトが返って来るのを待っている間はこの文より下の処理は実行されません。

より簡潔に記述する。

下記のように静的なresolveメソッドを使った関数を定義してより簡潔に記述する事ができます。

1
2
3
4
5
6
7
8
9
10
let promise1 = Promise.resolve("テスト");
let promise2 = Promise.resolve("テスト2");
 
async function kansu() {
  let a = await promise1
  let b = await promise2
  console.log(a); //テスト
  console.log(b); //テスト2
}
kansu();

エラー処理

rejectを使ったエラー処理は非同期関数内でtry 〜 catchで囲えば実現する事が可能になります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let promise1 = Promise.resolve("テスト");
let promise2 = Promise.reject("エラー発生");
 
async function kansu() {
  try {
    let a = await promise1
    let b = await promise2
    console.log(a);
    console.log(b);
  } catch (error) {
    console.log(error); //エラー発生
  }
}
kansu();

Promise.all

awaitを連続して記述するということもできますが、Promise.allを使う事でより簡潔に記述する事が可能になります。

1
2
3
4
5
6
7
8
9
let promise1 = Promise.resolve("テスト");
let promise2 = Promise.resolve("テスト2");
 
async function kansu() {
  let [a, b] = await Promise.all([promise1, promise2])
  console.log(a); //テスト
  console.log(b); //テスト2
}
kansu();

アロー関数を使って記述する。

非同期関数はアロー関数を使って下記のように記述することも可能です。

1
2
3
4
5
6
7
8
9
10
11
12
let promise = () => new Promise(resolve => {
  console.log("あ");
  resolve();
})
let abc = async () => {
  await Promise.all([
    promise(),
    promise()
  ]);
};
 
abc();

非同期関数から非同期関数を呼ぶ

非同期関数から非同期関数を呼んだ場合でもちゃんと順番に処理が実行されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let promise1 = Promise.resolve("テスト");
let promise2 = Promise.resolve("テスト2");
async function kansu2() {
  let a = await promise1;
  let b = await promise2;
  console.log(a);
  console.log(b);
}
async function kansu() {
  console.log("あ");
  await kansu2();
  console.log("い");
}
kansu();

実行結果

ちゃんとPromiseの結果を待って順番に処理されている事がわかります。

1
2
3
4
あ
テスト
テスト2
い

スポンサーリンク
  • 2020 05.03
  • miyabisan2
  • コメントを書く
  • JavaScript
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 03.21

    【Javascript】「html2canvas」、「jsPDF」について

  2. 2018 04.30

    【JavaScript】JavaScriptでのオブジェクト指向について

  3. 2021 06.20

    【JavaScript】「HTTPクライアントライブラリ」の比較(axios、fetch)、導入方法など

  4. 2022 04.04

    【Three.js】基本

  5. 2022 09.26

    【JavaScript】「JavaScriptエンジン」、「ブラウザのWeb API」など

  6. 2020 04.26

    【JavaScript】「レスト演算子」と「スプレット演算子」(「...という文字列」)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【JavaScript】文字列クラス(String)、…

【PHP】「関数」(文字列操作関数など)、クラス

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー