質問: () => { return setTimeout(async ()=>{ console.log("hello") return },1000) } ``` としてみたのですが、結果は、 ``` world hello ``` と、awaitが効かず、console.log("world")の方が先に実行されてしまいます。 async関数内でreturnすると、Promise.resolve()が返る、という認識なので、asyncに書き換えても結果は変わらないと思っていたのですが、なぜこの様な動作になるのでしょうか? また、どの様に書けば、きちんとawaitが効く様になるのでしょうか? ご教授、宜しくお願い致します。
回答: > > async関数内でreturnすると、Promise.resolve()が返る、という認識なので、asyncに書き換えても結果は変わらないと思っていたのですが、なぜこの様な動作になるのでしょうか? > > > `setTimeout`は**`Promise`と関わりを持たず**非同期処理を実行する関数です(返り値は`number`であって、`Promise`ではありません)。 そのため、「自分で`Promise`を立ててそれを`setTimeout`のコールバックで`resolve`させる」というような手段を講じない限り、`setTimeout`のコールバックは`Promise`をベースとした`async-await`の処理とは全く無関係に進行してしまいます。