【node.js】サーバサイドjavascript 5【Nashorn】 (796レス)
【node.js】サーバサイドjavascript 5【Nashorn】 http://mevius.5ch.net/test/read.cgi/tech/1518528093/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
515: デフォルトの名無しさん [sage] 2020/09/07(月) 13:52:39.16 ID:KQEAaFWf どなたか、次の JS のコードの結果が、2,5,3 ではなく、2,3,5 になっている理由を説明出来ますか? console.log( "0" ); var sample = new Promise( function(resolve, reject) { console.log( "1" ); setTimeout(function() { console.log( "2" ); resolve(); console.log( "3" ); }, 1000); }); console.log( "4" ); sample.then( function(value) { console.log( "5" ); }); console.log( "6" ); [結果] 0 1 4 6 2 3 5 http://mevius.5ch.net/test/read.cgi/tech/1518528093/515
516: デフォルトの名無しさん [sage] 2020/09/07(月) 14:38:17.12 ID:UUesL9I9 説明できますかって何だよ挑発してんのかよ resolve()は必ずイベントループに戻ってからthen()のコールバックが呼ばれるからに決まってるだろがボケカス マイクロタスクキューでも調べやがれポンコツ http://mevius.5ch.net/test/read.cgi/tech/1518528093/516
517: デフォルトの名無しさん [] 2020/09/07(月) 15:25:12.91 ID:Egt+Qwmp 0 4 1 6 2 3 5 とか 0 4 6 1 2 3 5 にならない? http://mevius.5ch.net/test/read.cgi/tech/1518528093/517
518: デフォルトの名無しさん [sage] 2020/09/07(月) 15:45:30.49 ID:UUesL9I9 ならない Promiseコンストラクタはコールバックを即時実行する MDN executor 関数は Promise 実装により resolve 関数と reject 関数が渡されて即座に実行されます (Promise コンストラクターが作成したオブジェクトを返すよりも前に executor は呼び出されます)。 http://mevius.5ch.net/test/read.cgi/tech/1518528093/518
519: デフォルトの名無しさん [sage] 2020/09/07(月) 17:09:51.23 ID:3uGG3SyO >>515 コールスタックが空にならないと、各種キューに入ってる処理は実行されない 最初にconsole.log(“6”);まで処理したらスタックが空になる その状態でsetTimeoutのタイマーが発動してキューにコールバック関数が入る スタックが空なのでキューの1番目にあるsetTimeoutのコールバック関数がスタックに積まれて呼び出される この関数がreturnするまではスタックは空にならないので それまではキューに入った処理を実行するタイミングはない console.log(“3”);まで実行してreturnしたらスタックが空になるので その後、各種キューに入ってる処理があれば実行される http://mevius.5ch.net/test/read.cgi/tech/1518528093/519
520: デフォルトの名無しさん [sage] 2020/09/07(月) 17:21:12.28 ID:KQEAaFWf 試してみたんですが、setTimeout()で指定している関数の中で、 resolve(111); resolve(222); resolve(333); としてから、 sample.then( function(value) { console.log( "5, value=", value ); }); とすると、 5, value = 111 とだけ表示されて、222, 333 の分は表示されないんですが、どういった 理由なのでしょう。 http://mevius.5ch.net/test/read.cgi/tech/1518528093/520
521: デフォルトの名無しさん [] 2020/09/07(月) 17:33:56.06 ID:Egt+Qwmp お前はもう死んでいる http://mevius.5ch.net/test/read.cgi/tech/1518528093/521
522: デフォルトの名無しさん [sage] 2020/09/07(月) 17:39:40.90 ID:UUesL9I9 最初にresolve()した時点でそのPromiseの値は確定するから つかスレに書き込む暇があるならドキュメントでも何でもいいから学習してPromiseがどういうもんか理解してから試せよ Promiseってのは「将来確定する"値"」を表現するもんなんだよ http://mevius.5ch.net/test/read.cgi/tech/1518528093/522
523: デフォルトの名無しさん [sage] 2020/09/07(月) 17:52:24.52 ID:neZOTIA1 一旦解決したPromiseを再度変更出来たらそれは改竄と呼ぶべきだな reject(111); resolve(222); reject(333); これは成功したのか失敗したのかどっちよ? http://mevius.5ch.net/test/read.cgi/tech/1518528093/523
524: デフォルトの名無しさん [sage] 2020/09/07(月) 18:07:19.89 ID:ieMFgaPK これ近頃よく見る相手にしちゃダメなやつだな http://mevius.5ch.net/test/read.cgi/tech/1518528093/524
525: デフォルトの名無しさん [sage] 2020/09/07(月) 18:08:35.44 ID:UUesL9I9 最初のreject()で失敗が確定する Promiseの状態はpending→settledと変わる settledにはfulfilledとfailedがある resolve()でfulfilled、reject()でfailedになる http://mevius.5ch.net/test/read.cgi/tech/1518528093/525
526: デフォルトの名無しさん [] 2020/09/08(火) 00:01:18.48 ID:8muSUg7S nodeの非同期を同期的にやりたい時のコードって promise async await resolve thenが複雑に入り組んで 意図した動きになった時はめっちゃ過剰なコードになるよね 精神的にヘトヘトに疲れて 清書する元気も起きん promiseやresolve変数がたくさん生成しまくって 名前つけるのもめんどうになって p1とかr3みたいなのが沢山できてる 特にforループの中に非同期使うときは地獄 早くmysqlを同期的にクエリ投げられる ライブラリ出してください。何でもしますから。 http://mevius.5ch.net/test/read.cgi/tech/1518528093/526
527: デフォルトの名無しさん [sage] 2020/09/08(火) 01:45:13.23 ID:1Wq/gxeB だからお前はプログラマやめろって 才能なさすぎ http://mevius.5ch.net/test/read.cgi/tech/1518528093/527
528: デフォルトの名無しさん [sage] 2020/09/08(火) 02:32:28.50 ID:o0Kum352 >>526 nodeも非同期も関係なくお前がめっちゃ過剰なコード書いてるだけだからな http://mevius.5ch.net/test/read.cgi/tech/1518528093/528
529: デフォルトの名無しさん [sage] 2020/09/08(火) 12:00:40.54 ID:gglleEZ2 ライブラリは需要があればとっくに作られてる 今現在無いのはつまりそういうことだ http://mevius.5ch.net/test/read.cgi/tech/1518528093/529
530: デフォルトの名無しさん [sage] 2020/09/08(火) 12:14:59.78 ID:1sQ8nqM1 そこの無能が探してもいないだけで無いわけじゃないだろ 例えばあるライブラリのREADMEから const conn = await mysql.createConnection({ database: test }); const [rows, fields] = await conn.execute('select ?+? as sum', [2, 2]); await conn.end(); トランザクションも await connection.beginTransaction(); 〜 await connection.commit(); と書ける http://mevius.5ch.net/test/read.cgi/tech/1518528093/530
531: デフォルトの名無しさん [] 2020/09/08(火) 13:42:27.36 ID:8muSUg7S select文を投げるのは selectの結果が欲しいから投げる訳であって 結果が取得できる前に 後続のコードに勝手に動かれたら困るのは 当たり前だよなあ? DBアクセスで非同期って何がメリットが あるのか分からない。 それにnodeの概念はバカの新人に言葉で説明しにくいんだよ あいつぜってー非同期とか理解出来ねえぞ http://mevius.5ch.net/test/read.cgi/tech/1518528093/531
532: デフォルトの名無しさん [sage] 2020/09/08(火) 13:47:44.03 ID:op+kwVtr 新人に言葉で説明できないバカ 新人かわいそう http://mevius.5ch.net/test/read.cgi/tech/1518528093/532
533: デフォルトの名無しさん [sage] 2020/09/08(火) 13:57:56.32 ID:c4WmASUK > 勝手に動かれたら 何も理解してないことがよく分かるw http://mevius.5ch.net/test/read.cgi/tech/1518528093/533
534: デフォルトの名無しさん [sage] 2020/09/08(火) 14:51:08.13 ID:QV2EnsJl お前の場合はMySQL一つしか使わないのが当たり前かもしれないが世の中にはシャードされた複数のMySQLにアクセスしたりキャッシュのRedisにアクセスしたり検索エンジンのelasticsearchにアクセスしたりいろんなことをしなきゃいけないアプリがあったりするわけ Nodeではこれらは非同期だから特別なことをしなくてもたやすく並行アクセスできる 同期で並行アクセスしようとすると複数スレッド使って待ち合わせすることになるから非同期より簡単にできるわけではない http://mevius.5ch.net/test/read.cgi/tech/1518528093/534
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 262 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.008s