async function f() {console.log(1); await newPromise(r => setTimeout(r, 1000));console.log(2);} f();console.log("done");
結果は、まず「1」「done」が出力され、1秒後に「2」が出力される。
流れを説明すると、f()が実行されると「console.log(1);」と「newPromise(r => setTimeout(r, 1000));」が実行される。
その時点でf()の戻り値として先ほどnewされた ……じゃなかった、f()を非同期実行中でそのうち続きが実行されますよというPromiseオブジェクトが返ってくる。
このPromiseオブジェクトは「resolveされたときにawait以降が実行される」というPromiseオブジェクトだ。
そして通常の処理の流れとして、その次の行の「console.log("done");」が実行される。
んで、1秒後にsetTimeoutで終わったことでキューに「r(イコール、resolve関数)」が登録される。
最後に、resolveが実行されたので、await以降……つまり「console.log(2);」が実行される。
どこか分からないとこある?
あとはasyncとかawaitの(抜本的な)理解を諦めかけてるがそもそも自分レベルじゃ飛ばすべきなのか? ・・・(略) await (acync f(){・・・ await (asycf()){・・・})(); ・・・ })(); (f(){ ・・・ await (async ...
とりあえず今理解できてることはは「asyncが実行されたらawaitが書いてあるところまでは実行してそのあとは一旦呼び出し元に戻ってそれが実行されるまではキューに入れられる」って...
実行キューに入るのは非同期処理が終了した後だ。 なんか矛盾してない? async function f() { console.log(1); new Promise(r => setTimeout(r, 1000)); console.log(2);} f();console.log("done"); こう書いたらコ...
多分お前が意図した通りに動くコードは、これだ。 async function f() { console.log(1); await new Promise(r => setTimeout(r, 1000)); console.log(2);} f();console.log("done"); 結果は、まず「1」「done」が出力さ...
お前のバカさ加減の由来がわからない
すまないな、asyncって書けば必ず非同期処理されるってわけじゃないのでな 非同期で関数を実行するための作法があるじゃろ?その時に呼び出せるのがasync付きの関数ってだけで
それは構造化プログラミングの話で、関数Aを実行する時、関数Aの中でBとCとDが同時に実行されてるからといってそんなことお前の知ったことではない お前は関数Aの返り血を待ってれば...
いやいやどういう順番で実行されるか自分が書いたコードに対してこう書いたならそうなると把握できてないと意図通りに変数の変化が起こっていかなくて簡単にバグるだろ。 AIに投げ...
その経験を通して、ある変数に対して複数のスレッドから書き込みが発生する状態は良くないというのは理解してもらえたと思う つまり非同期関数に他所の変数を触らせない工夫が必要...
不必要なところの理解まで踏み込もうとしている。 いや、理解はしたほうが良いんだけど、理解した上で忘れるべきことがあるというか……。 いわゆる「抽象の壁」というやつだ。 約...