promise、async、awaitについて処理の流れがよくわかりません。
以下にソースコードを示します。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> function sleep(ms){ return new Promise( function(resolve){ setTimeout(resolve, ms); } ); } async function hidoki(){ console.log("start sleep"); await sleep(2000); console.log("end sleep"); return 1; } let hi = hidoki(); console.log("main1"); hi.then( function(v){ console.log(v); } ); console.log("main2"); </script> </body> </html>
上記のプログラムは以下の流れで実行されると
なんとなく思えるのですが、誤りはありますでしょうか?
1. hidoki()が実行される。
1. 「start sleep」が表示される。
1. setTimeout(resolve, ms);が実行される。
1. 2秒待ちが始まる。
1. let hi = hidoki();が実行される。
1. 「main1」が表示される。
1. hi.then(略);が実行されコールバック関数?が登録される。
1. 「main2」が表示される。
1. 2秒待ちが終わる。
1. 「end sleep」が表示される。
1. hi.then(略);の中のconsole.log(v);が実行される。
特にわからないのが、JavaScriptはシングルスレッドなのに、「await sleep(2000);」で2秒待ち開始直後に「let hi = hidoki();」で「hidoki()」の戻り値が「hi」に格納される(?)というところです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/07 00:27
2021/02/07 02:01 編集
2021/02/07 02:01 編集
2021/02/07 02:08
2021/02/07 02:10
2021/02/07 02:30 編集