質問: await test(); console.log(JSON.stringify(result)); console.log("inner call end"); } console.log("outer call start"); call() console.log("outer call end"); ``` **■実行結果** ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7abd0929f50c5d439fa7dddd22950a5d.png)
回答: Promiseとは、登録された非同期の処理の完了をお知らせしてくれる便利なやつです。 async/awaitはES6から使えるようになった便利機能で、それまではthen(), catch()にコールバック関数を登録することで非同期処理の待ち合わせをするようになっていました。(たぶんここの理解が抜けてる) > > 1 処理待ちしたい関数は Promise でリターンする。 > > > 1. Promiseをリターンするか、async functionとして作成する > > 2 処理待ちしたい関数の受けて側は await で Promise が resolve になるまで待つ。 > > > 1. awaitを使用するか、またはpromise.then()へのハンドラを登録することで、resolveになるまで次の処理を待つ > > 3 awaitを持つ関数は宣言の前に await を宣言する。 > > > 1. awaitを内部で使える関数は、asyncとして宣言されているもののみ。 javascriptの地の文(というかなんというか)はasync functionではないのでawaitは使えない。 tempに入れる必要は無いのですが、こうですかね。 ``` var temp; evdDB.evdNoteStore .toArray() .then((notes) => { console.log(notes); temp = notes; // この処理を最初に実行したい! }) .then(() => { console.log(JSON.stringify(temp)); }) ```