Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録
< anond:20250908194506 |「やりやがった…!」... >

2025-09-08

dorawii@執筆依頼募集中

あとはasyncとかawaitの(抜本的な)理解を諦めかけてるがそもそも自分レベルじゃ飛ばすべきなのか?

・・・(略)

await (acync f(){・・・

await (asycf()){・・・})();

・・・

})();

(f(){

・・・

await (async f()){・・・})();

・・・

})();

※省略部分に書かれているのは全部同期関数

↑こういうコードがどういう流れキューに出し入れされるのかエンジン仕様に即したごまかしのない説明ができないから、逆に言えば自分意図に基づいて適切にawaitとか書けないためにバグのもとって状態になってる。

独習jsレベルに書いてあることじゃどう考えてもこういうコード挙動を読み解くのは無理(数学的な見方で言うなら提示されている公理が足りない)って感じだしいつデッドロックを起こすかもわからない理解のまま学習を進めても結局その無理解で詰まってあいまいに済ませてって感じで根本的なレベルが一生あがってかなさそうに思えるんだがどうなんだ?

とりあえず今理解できてることはは「asyncが実行されたらawaitが書いてあるところまでは実行してそのあとは一旦呼び出し元に戻ってそれが実行されるまではキューに入れられる」ってことだけ。

でもこの理解にしても「awaitの後ろに置かれてる関数の内部処理自体が途中までは同期関数だったらそこまでは実行されてからキューに入れられるのか?」とかに対する手がかりがなくてもう混乱しっぱなし。

-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250908195255# -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaL61iAAKCRBwMdsubs4+SKMOAQDXWR1tFpjkx7MBSQFS58GgB8MqU8LuQxugSCrg8OG8kQEArKKxXhQsgdDzc1z4stZcDl8ajX30rTcE7oXJTBNqIwI==IH5m-----ENDPGP SIGNATURE-----

Permalink |記事への反応(3) | 19:52

このエントリーをはてなブックマークに追加ツイートシェア

記事への反応 -
  • それは構造化プログラミングの話で、関数Aを実行する時、関数Aの中でBとCとDが同時に実行されてるからといってそんなことお前の知ったことではない お前は関数Aの返り血を待ってれば...

    • いやいやどういう順番で実行されるか自分が書いたコードに対してこう書いたならそうなると把握できてないと意図通りに変数の変化が起こっていかなくて簡単にバグるだろ。 AIに投げ...

      • その経験を通して、ある変数に対して複数のスレッドから書き込みが発生する状態は良くないというのは理解してもらえたと思う つまり非同期関数に他所の変数を触らせない工夫が必要...

  • 不必要なところの理解まで踏み込もうとしている。 いや、理解はしたほうが良いんだけど、理解した上で忘れるべきことがあるというか……。 いわゆる「抽象の壁」というやつだ。 約...

  • とりあえず今理解できてることはは「asyncが実行されたらawaitが書いてあるところまでは実行してそのあとは一旦呼び出し元に戻ってそれが実行されるまではキューに入れられる」って...

    • 実行キューに入るのは非同期処理が終了した後だ。 なんか矛盾してない? async function f() { console.log(1); new Promise(r =&gt; setTimeout(r, 1000)); console.log(2);} f();console.log("done"); こう書いたらコ...

      • すまないな、asyncって書けば必ず非同期処理されるってわけじゃないのでな 非同期で関数を実行するための作法があるじゃろ?その時に呼び出せるのがasync付きの関数ってだけで

      • 多分お前が意図した通りに動くコードは、これだ。 async function f() { console.log(1); await new Promise(r =&gt; setTimeout(r, 1000)); console.log(2);} f();console.log("done");   結果は、まず「1」「done」が出力さ...

記事への反応(ブックマークコメント)

全てのコメントを見る

人気エントリ

注目エントリ

ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp