こんにちは、mabuiです。
今回は自分の備忘録も兼ねてJavaScriptのasync awaitについてまとめていきます。
はじめに
async await
は、非同期処理を簡潔に行うことができるJavaScriptの構文です。
非同期処理とは処理の結果を待たずに次の処理に移る仕組みのことで、
反対に同期処理とはプログラムが記述された通り順に実行される処理のことです。
async awaitの使い方
async await
を使用する場合、非同期処理を実行する関数をasync function
宣言で定義します。
async function | MDN
1 2 3 4 |
async function hoge() { return 'hoge' } |
このasync function
は呼び出されることでPromise
オブジェクトを返却します。
1 2 3 |
// Promise {<resolved>: "hoge"} console.log(hoge()) |
async function
で値がreturn
された場合はPromise
オブジェクトのステータスはresolved
、エラーが発生した場合にはrejected
を返却します。
1 2 3 4 5 6 7 |
async function hoge() { throw new Error('hoge') } // Promise {<rejected>: Error: hoge console.log(hoge()) |
Promise
オブジェクトとは、非同期処理の途中の状態を表すオブジェクトで、
await
を使用することで非同期処理が終わるまで待機し、結果を取得することができます。
await
はasync function
内でしか使用できません。
1 2 3 4 5 6 7 8 9 10 11 12 |
async function hoge() { return 'hoge' } async function fuga() { const result = await hoge() console.log(result) } // hoge fuga() |
ES6でのforEachの注意点
jsのforEachはasync/await機能しなくなるんですねー
かなりハマりました。— mabui@ハビットチェーンエンジニア (@mabui_x) 2018年12月13日
async/awaitを、Array.prototype.forEachで使う際の注意点、という話
こちらの記事を参考にしましたが、forEach
内部のコールバック関数を呼ぶ処理でawait
が使用されていないため、非同期処理の結果を待つことなく、処理が継続されてしまいます。(検証バージョン:node v10.9.0)