【node.js】サーバサイドjavascript 5【Nashorn】 (796レス)
1-

489
(1): 2020/08/20(木)20:16 ID:X1nNk3cj(1) AAS
>>486
それマルチスレッドの話じゃね?「非同期」つってもjavascriptのそれとは意味が違う。
490
(1): 2020/08/20(木)20:32 ID:tyNv301J(1/2) AAS
pendingは普通にPromiseの話やろ

Promiseを理解せず非同期のコード書くのが悪い
491
(2): 2020/08/20(木)20:41 ID:qjxJt4Hn(1/2) AAS
>>489
node.jsのスレだからJavaScriptの話なんだが
nodeってシングルスレで合ってる?

あと素人で申し訳ないが
if文がある時もそれ以降のコードに勝手に進んじゃうの?

たとえば
if(非同期の真偽値メソッド() ){
省6
492: 2020/08/20(木)20:44 ID:qjxJt4Hn(2/2) AAS
>>490
非同期のコードが書くの悪いって僕も書きたくないです。
でもデフォルトで非同期の関数ばかりですよね?
ちょっとでも油断すると非同期になっちゃうんです
もちろんasyncやawaitつけてるけど
ついつけ忘れるといつの間にか非同期になってるんです。
493: 2020/08/20(木)20:49 ID:AoU9HO21(2/2) AAS
await付け忘れるヤツが悪い
TypeScriptで型チェックしとけ
494: 2020/08/20(木)21:17 ID:t5R+TL7j(2/2) AAS
>>491
if(await hoge())するだけ
何も難しいことない
495: 2020/08/20(木)22:05 ID:wmqy4S/J(1) AAS
まぁそこは同期が基本から非同期が基本に頭切り替えないとね
496: 2020/08/20(木)22:43 ID:tyNv301J(2/2) AAS
>>491
nodeに限らずJSは基本シングルスレッド

JSで本格的にコード書くなら
シングルスレッドでどうやって非同期や並行処理を実現してるのかを
最低限の知識として知っておく必要がある

setTimeout(fn, 0)で渡したfnがどのタイミングで実行されるのかと同じ
少し詳しめのチュートリアルならだいだい解説してある
497: 2020/08/21(金)00:43 ID:CMx879FZ(1) AAS
とは言え今ではスレッドも使えるから上手く利用したいところ。
シングルスレッドにこだわってコールバックの中で時間のかかる処理しちゃったら本末転倒。
498: 2020/08/21(金)01:18 ID:RmDQK783(1) AAS
プロセスも使えるぞ。
せっかくだからV8 isolateも使いたいけどどうやるんだっけ…
499: 2020/08/21(金)01:47 ID:fPne1yUC(1) AAS
workerが別スレッドのisolate
500
(1): 2020/09/01(火)20:38 ID:QR4OvP6I(1/3) AAS
nodeはバッチ処理にはマジで向いてないよな
ループ中に非同期発生すると
ループ番号の順序性があべこべになるとか
ヤバすぎる
ループ外グローバル変数への
数値溜め込み処理とかどうなるんだこれ

あと完了したと思ってた処理が
省3
501: 2020/09/01(火)20:42 ID:I2eVqLbl(1/2) AAS
無能w
502: 2020/09/01(火)20:43 ID:tH3NhyKR(1) AAS
>>500
アホ過ぎるwww
503: 2020/09/01(火)20:58 ID:z4ASdXsC(1) AAS
>ループ中に非同期発生すると

まるで自然現象とか天災みたいな言い方
504
(1): 2020/09/01(火)21:12 ID:QR4OvP6I(2/3) AAS
すまん、俺は無能なんだわ
バッチ処理は終わるまで時間がかかるから
プログレスバーとして
進捗報告として
データベースの進捗状況テーブルへ
進行度をアップデートしてんだわ
毎ループ進捗報告しなくていいから
省9
505: 2020/09/01(火)21:24 ID:I2eVqLbl(2/2) AAS
コード書くのやめろ
506
(1): 2020/09/01(火)21:59 ID:usFRsaVF(1/2) AAS
進捗の書き込みはシリアルにやればいいよね?
「80%完了」の後に「70%完了」が来ても無視すればいい
507
(1): 2020/09/01(火)22:02 ID:QR4OvP6I(3/3) AAS
>>506
無視するようにしてるんだよ
whereで大小比較して
更新する数の方が小さかったら更新されないように
してる
でもDB上の数値が減るんだよ。何故だ?
508: 2020/09/01(火)22:05 ID:3AXmEbq5(1) AAS
コードも無しで言われても知らんわ
509: 2020/09/01(火)22:28 ID:usFRsaVF(2/2) AAS
>>507
シリアルに書いてないからでしょ
今実行中の進捗報告の書き込みが完了してから
次の進捗報告の書き込みをする

理解できないほうが謎
510: 2020/09/02(水)02:59 ID:bHRnrATQ(1) AAS
7月入ってからageながら変なこと書いてんの同じ人っぽいな
挫けないでがんばれよ
511: 2020/09/02(水)12:32 ID:U40YU3HI(1) AAS
並列処理しなければ良い

1つが、確実に終わってから、
次のものを処理する
512: 2020/09/02(水)13:19 ID:FrAP3fk+(1) AAS
回答者まで同じ内容を繰り返し始めたw
513: 2020/09/02(水)21:31 ID:C0O9Iab7(1) AAS
>>504
こうなる原因が今日特定出来た
ループ自体が多重に並列に動作してた
1つのfor文が動いてるんだと思ってたら
ログをよくよく見たらfor文自体が
3つくらい並列で動いてた
勝手に多重実行になった原因は、
省14
514: 2020/09/02(水)22:07 ID:m9UvO5Rn(1) AAS
お前がコード書くのをやめる、が正解
515
(1): 2020/09/07(月)13:52 ID:KQEAaFWf(1/2) AAS
AA省
516: 2020/09/07(月)14:38 ID:UUesL9I9(1/4) AAS
説明できますかって何だよ挑発してんのかよ
resolve()は必ずイベントループに戻ってからthen()のコールバックが呼ばれるからに決まってるだろがボケカス
マイクロタスクキューでも調べやがれポンコツ
517: 2020/09/07(月)15:25 ID:Egt+Qwmp(1/2) AAS
0
4
1
6
2
3
5
省9
518: 2020/09/07(月)15:45 ID:UUesL9I9(2/4) AAS
ならない
Promiseコンストラクタはコールバックを即時実行する

MDN
executor 関数は Promise 実装により resolve 関数と reject 関数が渡されて即座に実行されます (Promise コンストラクターが作成したオブジェクトを返すよりも前に executor は呼び出されます)。
519: 2020/09/07(月)17:09 ID:3uGG3SyO(1) AAS
>>515
コールスタックが空にならないと、各種キューに入ってる処理は実行されない

最初にconsole.log(“6”);まで処理したらスタックが空になる
その状態でsetTimeoutのタイマーが発動してキューにコールバック関数が入る
スタックが空なのでキューの1番目にあるsetTimeoutのコールバック関数がスタックに積まれて呼び出される
この関数がreturnするまではスタックは空にならないので
それまではキューに入った処理を実行するタイミングはない
省2
520: 2020/09/07(月)17:21 ID:KQEAaFWf(2/2) AAS
試してみたんですが、setTimeout()で指定している関数の中で、
resolve(111);
resolve(222);
resolve(333);
としてから、
sample.then( function(value) {
  console.log( "5, value=", value );
省5
521: 2020/09/07(月)17:33 ID:Egt+Qwmp(2/2) AAS
お前はもう死んでいる
522: 2020/09/07(月)17:39 ID:UUesL9I9(3/4) AAS
最初にresolve()した時点でそのPromiseの値は確定するから
つかスレに書き込む暇があるならドキュメントでも何でもいいから学習してPromiseがどういうもんか理解してから試せよ
Promiseってのは「将来確定する"値"」を表現するもんなんだよ
523: 2020/09/07(月)17:52 ID:neZOTIA1(1) AAS
一旦解決したPromiseを再度変更出来たらそれは改竄と呼ぶべきだな
reject(111);
resolve(222);
reject(333);
これは成功したのか失敗したのかどっちよ?
524: 2020/09/07(月)18:07 ID:ieMFgaPK(1) AAS
これ近頃よく見る相手にしちゃダメなやつだな
525: 2020/09/07(月)18:08 ID:UUesL9I9(4/4) AAS
最初のreject()で失敗が確定する
Promiseの状態はpending→settledと変わる
settledにはfulfilledとfailedがある
resolve()でfulfilled、reject()でfailedになる
526
(1): 2020/09/08(火)00:01 ID:8muSUg7S(1/3) AAS
nodeの非同期を同期的にやりたい時のコードって
promise async await
resolve thenが複雑に入り組んで
意図した動きになった時はめっちゃ過剰なコードになるよね
精神的にヘトヘトに疲れて 清書する元気も起きん
promiseやresolve変数がたくさん生成しまくって
名前つけるのもめんどうになって
省4
527: 2020/09/08(火)01:45 ID:1Wq/gxeB(1) AAS
だからお前はプログラマやめろって
才能なさすぎ
528: 2020/09/08(火)02:32 ID:o0Kum352(1) AAS
>>526
nodeも非同期も関係なくお前がめっちゃ過剰なコード書いてるだけだからな
529: 2020/09/08(火)12:00 ID:gglleEZ2(1/2) AAS
ライブラリは需要があればとっくに作られてる
今現在無いのはつまりそういうことだ
530
(1): 2020/09/08(火)12:14 ID:1sQ8nqM1(1) AAS
そこの無能が探してもいないだけで無いわけじゃないだろ
例えばあるライブラリの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();
省3
531: 2020/09/08(火)13:42 ID:8muSUg7S(2/3) AAS
select文を投げるのは
selectの結果が欲しいから投げる訳であって
結果が取得できる前に
後続のコードに勝手に動かれたら困るのは
当たり前だよなあ?
DBアクセスで非同期って何がメリットが
あるのか分からない。
省2
532: 2020/09/08(火)13:47 ID:op+kwVtr(1) AAS
新人に言葉で説明できないバカ
新人かわいそう
533: 2020/09/08(火)13:57 ID:c4WmASUK(1) AAS
> 勝手に動かれたら

何も理解してないことがよく分かるw
534
(1): 2020/09/08(火)14:51 ID:QV2EnsJl(1) AAS
お前の場合はMySQL一つしか使わないのが当たり前かもしれないが世の中にはシャードされた複数のMySQLにアクセスしたりキャッシュのRedisにアクセスしたり検索エンジンのelasticsearchにアクセスしたりいろんなことをしなきゃいけないアプリがあったりするわけ
Nodeではこれらは非同期だから特別なことをしなくてもたやすく並行アクセスできる
同期で並行アクセスしようとすると複数スレッド使って待ち合わせすることになるから非同期より簡単にできるわけではない
535: 2020/09/08(火)16:00 ID:8muSUg7S(3/3) AAS
>>534
ああ、アクセスするのは簡単やと思うわ
問題はその結果の始末を付けるのが大変だと思うわ
なんかいい書籍あるか?
536: 2020/09/08(火)17:40 ID:Qj0BclxS(1) AAS
本当に本当にダメなヤツだなぁ(呆れ)
アクセスってのは接続して要求を投げて結果を受け取ってそれを処理して接続を閉じるまでの一連に決まってるだろ
>>530の例だって後始末まで書いてあるのに全然大変じゃないだろが
537: 2020/09/08(火)19:19 ID:gglleEZ2(2/2) AAS
とりあえずオライリーでも読んだらいいんじゃない
外部リンク:www.amazon.jp
538: 2020/09/09(水)06:42 ID:N3PFvdWI(1) AAS
スレ的には真っ当な質問なのに当たり強過ぎでしょ
539: 2020/09/09(水)08:44 ID:7Dxn++Hv(1) AAS
質問じゃなくて文句
540: 2020/09/09(水)17:07 ID:SFlZHAWP(1) AAS
謙虚に質問してればレスも優しかったかもよ
541: 2020/09/09(水)21:03 ID:OFM+73CL(1) AAS
分からないだけならともかく延々と自分以外を貶めつつ無能を晒してたからなぁ
542: 2020/09/09(水)21:12 ID:XGuez22g(1) AAS
それな

× node.js が悪い
× 非同期が悪い
× promise が悪い
× async/awaitが悪い
× 新人がバカ
ID:8muSUg7S がバカ
省1
543: 2020/09/10(木)14:55 ID:rLZBXCmM(1) AAS
グレたωωω
544
(1): 2020/09/10(木)19:56 ID:FWP0gZB+(1) AAS
clusterでマルチプロセスしようとしたんだけど
「EADDRINUSE(ポートが既に使われている)」
エラーがどうしても出てしまいます。
もちろん既に稼働しているnodeはなく、
fork元のapp.jsでlistenしているのと同じポート
子プロセスでまたbindしようとして失敗しているようで
子プロセスは外部からリクエストを受けるような
省6
545
(1): 2020/09/10(木)20:18 ID:VafdMbGz(1) AAS
> 子プロセスは外部からリクエストを受けるようなものではなく

それならclusterモジュールは必要なくね
clustetは複数のプロセスを使って大量のリクエストを捌くためのもの
ただの子プロセスならchild_processのメソッドを使う
546: 2020/09/10(木)20:21 ID:C+K2oJgr(1) AAS
>>545
なるほど、助かりました
じつはworker_threadsも試してみて同じ
エラー出たので
child_processが正解でしたか
これだとポートは関係ない?
547: 2020/09/10(木)20:43 ID:oBZEl9rg(1/2) AAS
clusterだと親は子を産むだけの役割じゃなかったっけ
548: 2020/09/10(木)20:45 ID:oBZEl9rg(2/2) AAS
あとworker_threadsで同じエラーが出るのはいくらなんでもおかしい
549: 2020/09/14(月)20:42 ID:JdQogpR1(1/4) AAS
>>544 の者ですが
今日これをデバッグしてました。
clusterでもwoker_threadsfでも
child_processでも
「EADDRINUSE」が発生しました

発生するタイミングは子プロセスを生成した時でも
なく
省11
550
(1): 2020/09/14(月)20:55 ID:AayaioGL(1/2) AAS
説明と全然違う事象じゃねーの
せめてエラーメッセージとスタックトレース貼れ
551: 2020/09/14(月)20:55 ID:JdQogpR1(2/4) AAS
続きですか
もう少し調べてみると
「EADDRINUSE」が発生するタイミングは
MySQLに対しコネクション確立後
SQLを投げる時で間違いないと思いますが、
エラーのスタックとレースを見ても
何かのハンドラから駆動されており自分の書いたコードでは
省8
552: 2020/09/14(月)20:56 ID:JdQogpR1(3/4) AAS
不思議なのが子プロセスで
mysqlとコネクション確立までは失敗せずに
動作し、SQLを投げる段階で
なぜか大元の「app.js」をもう1つ起動しようとしており
app.jsはもう既に起動してるので、
listenポート重複により上記のエラーが発生するわけです
暫定対応で動くようにはなりましたが、
省9
553: 2020/09/14(月)20:57 ID:JdQogpR1(4/4) AAS
>>550
すみません、もう帰宅してしまったのと
機密事項で怒られるのでスタックトレースは貼れません
554: 2020/09/14(月)21:14 ID:AayaioGL(2/2) AAS
> 単体でコマンドで実行した場合も
> Expressのベースディレクトリにある
> 「app.js」が実行されていることが分かりました。

clusterも何も関係ねーじゃんwww
断言するがフレームワークもモジュールもmysqlも関係なくてお前のバグだから真面目に仕事しろ
子プロセスから再現に関係ない部分を削除しまくって最小限のここで見せられるコードになるまで書き込まなくていいよ
555: 2020/10/03(土)14:17 ID:l4QjehZB(1) AAS
外部リンク:detail.chiebukuro.yahoo.co.jp
abiko tetuってやつヤバすぎ
556
(1): 2020/10/17(土)18:10 ID:cX3MrjsP(1/2) AAS
フォルダ全体をコピーしたくて fs-extra のcopySync()を使うために
const fse = require('fs-extra');
としたら、
internal/modules/cjs/loader.js:968
throw err;
^
Error: Cannot find module 'fs-extra'
省6
557: 2020/10/17(土)18:39 ID:cX3MrjsP(2/2) AAS
>>556
結論的には、

$ npm install -g fs-extra

$ set NODE_PATH=%AppData%\npm\node_modules

としてから、

node xxxx.js
省1
558: 2020/10/17(土)23:48 ID:5XNVi7jP(1) AAS
Windows?
559: 2020/10/19(月)16:19 ID:faSV5MEm(1) AAS
# Fatal error in , line 0
とか見慣れぬエラーで落ちててビビって調べたらv14のバグか
560: 2020/10/25(日)03:29 ID:xG/xcmJA(1/3) AAS
import って mjsにしないといけないし
561: 2020/10/25(日)03:30 ID:xG/xcmJA(2/3) AAS
途中送信すまん
562: 2020/10/25(日)04:23 ID:Xs0QdE0/(1) AAS
mjsにしないといけないから何なんだよ気になるだろ…
因みにpackage.json弄れば.jsをESM扱いにはできる
563
(1): 2020/10/25(日)13:32 ID:xG/xcmJA(3/3) AAS
node v15にしたからmjsにして requireを全部importに変更したらpuppeteerがimportできなくてまたrequireに戻した
564
(1): 2020/10/26(月)06:48 ID:AP4vuhmG(1/2) AAS
下記のモジュールを使用してHTMLソースからタグを全て取り除く処理を作っているのですが、タグを取り除いてくれません。
ES6で記述されたjavascriptを対応していないブラウザで動作させるために記法を変換してから読み込ませることは知っているのですが、
nodeコマンドで直接実行する場合にもそのような記法の変換などが必要なのでしょうか?

◆モジュール
外部リンク:github.com

◆ソース
main.js
省6
565
(1): 2020/10/26(月)13:39 ID:jWz3MMEX(1) AAS
html = striptags(html);
じゃないの?
566: 2020/10/26(月)14:12 ID:AP4vuhmG(2/2) AAS
>>565
教えて頂いた方法で取り除かれていることが確認できました。
公開されているソースを確認したら戻り値を受け取るようになっていました。
今後はソースも確認するようにします。
ありがとうございました。
567: 2020/10/26(月)14:44 ID:/aZJ5myY(1) AAS
その前にJavaScriptの勉強をちゃんとすべきでは。。。
JSの文字列は不変って知ってればstriptagsの使い方を知らなくても>>564の書き方じゃダメってわかったはず
568: 2020/10/28(水)03:46 ID:Xggm0kAQ(1) AAS
Fetchより先にAbortControllerが来るのタイムパラドックス感がある
569: 2020/10/28(水)14:31 ID:jeoOjGPI(1/2) AAS
node.jsがあればPHPはもういらないよね?
1-
あと 227 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s