質問編集履歴

1

いくつか追加で処理を変更してみたので、修正しました。回答お願いします!

2018/04/21 07:05

投稿

hamar1
hamar1

スコア26

test CHANGED
File without changes
test CHANGED
@@ -4,27 +4,9 @@
4
4
 
5
5
  node.jsでalexaの情報を受けて、dynamoを更新してから返答を返したいです。
6
6
 
7
- slack連携のアプリをnode.jsで作っているのでnode.jsにトライしています。
8
-
9
- (普段はPythonを利用していることが多いです)
10
-
11
7
 
12
8
 
13
9
  かなり長いですが、よろしくお願いします。
14
-
15
-
16
-
17
- ### 発生している問題・エラーメッセージ
18
-
19
-
20
-
21
- JavaScriptの非同期処理の順序立てのためのcallbackをうまく使えないのと、記法がよく分からないです。
22
-
23
- ```
24
-
25
- speechOutput is undefined
26
-
27
- ```
28
10
 
29
11
 
30
12
 
@@ -48,17 +30,19 @@
48
30
 
49
31
  "ja": { "translation": {"STOP_MESSAGE": "スキルを終了します。",...}}};
50
32
 
33
+ dataEmitter = new myEmitter();
34
+
51
35
 
52
36
 
53
37
  // dynamo process
54
38
 
55
- function dynamoLogHandler(userGaveUp) {
39
+ function dynamoLogHandler(data) {
56
40
 
57
41
  var params_update = {
58
42
 
59
43
  TableName:'test_table',
60
44
 
61
- Key:{"eventId":this.request.intent.solts.test.name},
45
+ Key:{"eventId":data.request.intent.solts.test.name},
62
46
 
63
47
  AttributeUpdates:{
64
48
 
@@ -74,11 +58,15 @@
74
58
 
75
59
  });
76
60
 
77
- this.response.speak(speechOutput);
61
+ // 今回修正した処理
78
62
 
79
- this.emit(':responseReady');
63
+ dataEmitter.emit('data',speechOutput)
80
64
 
65
+ // 前回質問していた時の処理-> thisがundefinedになる
81
66
 
67
+ //this.response.speak(speechOutput);
68
+
69
+ //this.emit(':responseReady');
82
70
 
83
71
  }
84
72
 
@@ -88,7 +76,13 @@
88
76
 
89
77
  function handlerTest(userGaveUp){
90
78
 
91
- let speechOutput = dynamoHandler(this);
79
+ dynamoLogHandler(this);
80
+
81
+ // 現在の処理 -> ここまでで有れば正常にdynamoUpdateが走る
82
+
83
+ let speechOutput = dataEmitter.on('data',function(speechOutput){return speechOutput;}));
84
+
85
+ // トライした処理 -> この先を入れるとresponseが[Object Object]
92
86
 
93
87
  // this.response.speak(speechOutput);
94
88
 
@@ -134,7 +128,35 @@
134
128
 
135
129
 
136
130
 
131
+ ### 全体の流れ
132
+
133
+
134
+
135
+ 1. alexa handlerでtestIntentが設定されます。
136
+
137
+ 2. testIntentHandlerが実行され、dynamoLogHandlerが呼び出されます。
138
+
139
+ 3. dynamoDBを更新します(ここにはミスはないです)
140
+
141
+ 4. dynamoLogHandlerの処理が終了すると、emitterでtestIntentHandlerに戻ります
142
+
143
+ (let speechOutput = dataEmitter.on('data',function);
144
+
145
+ 5. `this.emit(':tell',speechOutput)`で発話内容をAlexaに返します
146
+
147
+
148
+
149
+ ### 問題点
150
+
151
+ 4番までで実行すると、全てが正常に実行されて進むのですが、
152
+
153
+ この、5番を入れると、emitterが[Object Object]として定義されてしまい、3,4を実行せずに終了してしまいます。
154
+
155
+
156
+
137
157
  ### 試したこと&分かっていないこと
158
+
159
+ `emitter`を利用することで、
138
160
 
139
161
 
140
162
 
@@ -149,11 +171,3 @@
149
171
  また、sdkを参照して作っているのですが、`userGaveUp`が何を指すのかどのような使い方ができるのかが不明です。
150
172
 
151
173
  全ての処理は記載していないですが、うまくいっていない部分は上記になります。
152
-
153
-
154
-
155
- ### 補足情報(FW/ツールのバージョンなど)
156
-
157
-
158
-
159
- node.js