回答編集履歴
2
もう少し、核心部分を追記
test
CHANGED
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
###コールバックによる非同期動作について
|
60
60
|
|
61
|
-
他の
|
61
|
+
他の回答へのコメントを見ていて、コールバックによる非同期動作について解説する必要があるかと思い、追記します。
|
62
62
|
|
63
63
|
|
64
64
|
|
@@ -82,6 +82,16 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
+
node.js はシングルスレッドで動作しており、
|
86
|
+
|
87
|
+
0. 読み込んだプログラムの実行
|
88
|
+
|
85
|
-
|
89
|
+
0. 保留されたコールバックのうち、実行可能なもの(I/Oが終わったもの)を一つ選び実行
|
90
|
+
|
91
|
+
0. 2.を繰り返し、保留されたコールバックがなくなるとプロセスを終了
|
86
92
|
|
87
93
|
|
94
|
+
|
95
|
+
という処理を行います。シングルスレッドであるため、I/O ごとにスレッドの実行を保留することは性能上許されません。そのかわりにマルチスレッドプログラミングのように微妙なタイミングを考えてmutex を使ったりする必要が無いわけです。
|
96
|
+
|
97
|
+
|
1
コールバックに関する説明を追加
test
CHANGED
@@ -51,3 +51,37 @@
|
|
51
51
|
|
52
52
|
|
53
53
|
参考:[Node.jsのコールバック地獄をPromiseやGeneratorを使って解消する](http://postd.cc/node-js-callback-hell-promises-generators/)
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
###コールバックによる非同期動作について
|
60
|
+
|
61
|
+
他の質問へのコメントを見ていて、コールバックによる非同期動作について解説する必要があるかと思い、追記します。
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
もとのコードの```dynamodb.scan``` を呼び出した時、この API はその終了を待たずに帰ってきます。
|
66
|
+
|
67
|
+
すると、getAllQueryの実行自身も終了し、 ```function (err, data) {}```で記述した内容は実行を保留された状態になります。この保留された内容はプログラム全体が終了まで実行されません。したがいまして、
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
```javascript
|
72
|
+
|
73
|
+
var result = getAllQuery(TABLE_ACCOUNT_LIST);
|
74
|
+
|
75
|
+
// result を参照する処理
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
と書きたくても、 result に結果を入れることは不可能なのです。一旦、プログラムを終了すれば、保留されていたコールバック(```function (err, data) {}```で記述した内容)が実行されます。そして、そこから新たな旅を始めなければなりません。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
node.js はシングルスレッドで動作しており、 I/O ごとにスレッドの実行を保留することは性能上許されません。そのかわりにマルチスレッドプログラミングのように微妙なタイミングを考えてmutex を使ったりする必要が無いわけです。
|
86
|
+
|
87
|
+
|