理解
分かってきたよ。こういう理解で良いかな?
- まず、javascriptはシングルスレッドで非同期で動く。並列処理はできない。
- DB読み書きやRESTコールなど外部処理のものは待たずに、どんどん次を処理する。
- 非同期で動いているものが終わった後にどうするか記述したいからコールバック関数がある。
- 非同期で動くものを順番に並べるにはコールバックの中にコールバックを書くネスト状にしなくてはならない。これがいわゆるコールバック地獄。
- もっと効率よく順番にならべるには?Promise thenを使う。thenを並べれば良いだけだから楽。
- もしくは、async / awaitを使うとキレイに書ける。
- awaitはasync functionの中にしか書けない。
- async関数はPromiseを返却する。
書き方
note.com
こんな感じで書くとexample1を待って(await)から処理してくれるみたい。
const execute = async() => { const example1 = () => { return new Promise((resolve, reject)=>{ setTimeout(()=>{ console.log("example1") resolve(); }, 1000) }) } const example2 = () => { console.log("example2") } const example3 = () => { console.log("example3") } await example1() example2() example3() } execute()
参考
https://ja.javascript.info/async-await
引用
関数の前の async キーワードは2つの効果があります:
常に promise を返します
その中で await を使えるようにします