回答編集履歴

2

全体的に文章を修正

2018/11/16 10:16

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -1,4 +1,4 @@
1
- これがJS名物、非同期プログラミングの洗礼です。
1
+ これがJS名物、非同期処理の洗礼です。
2
2
 
3
3
  Node.jsのイベントループに関して調べましょう。
4
4
 
@@ -16,11 +16,19 @@
16
16
 
17
17
 
18
18
 
19
- JSにはイベントループ置き場というものがあります。
19
+ JSにはイベント置き場というものがあります。
20
20
 
21
21
  そこに「イベントの発火条件」と「条件を満たした時に実行して欲しい処理を関数化したモノ」を登録します。
22
22
 
23
+
24
+
23
- JSは既存の処理を全て実行した後、イベントループ状態となり、イベントの発火条件を満たした関数を一つずつ取り出して実行していきます。
25
+ JSは既存の処理を全て実行した後、イベントループ状態となり、
26
+
27
+ イベントの発火条件を満たした関数を探して巡回するだけのモードに突入します。
28
+
29
+ そして、発火条件を満たしたイベントがあれば、それに紐づく関数を一つ取り出して実行します。
30
+
31
+ そのイベント実行が終われば次のイベント発火条件を満たしたか否かを探しに行きます。
24
32
 
25
33
 
26
34
 
@@ -50,21 +58,31 @@
50
58
 
51
59
  - request.getメソッドを実行
52
60
 
61
+ - request.getメソッド内、先方のWebサイトにHTTPのGETリクエストを発射(レスポンスを待たずに次へ)
62
+
53
63
  - request.getメソッドはイベントループ置き場に、「HTTPアクセスの結果が帰ってきたら」をトリガーに第二引数の関数を設定
64
+
65
+ - request.getメソッドはイベント登録が完了したので動作終了
54
66
 
55
67
  - main関数は正常終了、returnはないのでundefinedを返す
56
68
 
57
69
 
58
70
 
59
- こういう挙動になる、絶対にundefinedが帰ります。
71
+ 大まかにはこういう挙動になっていはずです。
60
72
 
73
+
74
+
75
+ このままmain関数を実行すれば絶対にundefinedが帰ります。
76
+
77
+ イベントループ時に`return body`部分の関数を実行していますが、
78
+
61
- `return body`を内部に持っている関数はイベントループが実行していますが、イベントループ自体は引数を必要としていないので戻り値のbodyは残念ながら捨てられてしいます。
79
+ イベントループ自体は引数を必要としていないので戻り値のbodyはそのまま捨てられます。
80
+
81
+
62
82
 
63
83
  従って、質問文で`main() + sub()`とやると、`undefined-sub`になるのは正常な動作となります。
64
84
 
65
-
66
-
67
- HTTPアクセスの結果を待って`body`が欲しいのであれば、
85
+ もしHTTPアクセスの結果を待って`body`が欲しいのであれば、
68
86
 
69
87
  request.getの第二引数の関数内に全ての処理を格納する必要があります。
70
88
 

1

多少流れを修正

2018/11/16 10:16

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -58,7 +58,15 @@
58
58
 
59
59
  こういう挙動になるので、絶対にundefinedが帰ります。
60
60
 
61
+ `return body`を内部に持っている関数はイベントループが実行していますが、イベントループ自体は引数を必要としていないので戻り値のbodyは残念ながら捨てられてしまいます。
62
+
63
+ 従って、質問文で`main() + sub()`とやると、`undefined-sub`になるのは正常な動作となります。
64
+
65
+
66
+
67
+ HTTPアクセスの結果を待って`body`が欲しいのであれば、
68
+
61
- HTTPアクセスの結果を待つためには、request.getの第二引数の関数内に全ての処理を格納する必要があります。
69
+ request.getの第二引数の関数内に全ての処理を格納する必要があります。
62
70
 
63
71
 
64
72
 
@@ -70,7 +78,7 @@
70
78
 
71
79
  まぁ、HTTPアクセスの結果を待ってから実行する第二引数の関数内で、
72
80
 
73
- 全てのやりたいことを記述しろって中々とち狂ったこと言ってますね。
81
+ 全てのやりたいことを記述しろですから、中々とち狂ったこと言ってますね。
74
82
 
75
83
 
76
84
 
@@ -78,6 +86,6 @@
78
86
 
79
87
 
80
88
 
81
- Node.jsはこのコールバック地獄とどう付き合うかでプログラミングテクニックを駆使る言語ですので、
89
+ Node.jsはこのコールバック地獄と付き合う為のテクニックが色々とありますので、
82
90
 
83
91
  色々と調べたりコードを書いてみてください。