質問編集履歴
1
いくつか追加で処理を変更してみたので、修正しました。回答お願いします!
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(
|
39
|
+
function dynamoLogHandler(data) {
|
56
40
|
|
57
41
|
var params_update = {
|
58
42
|
|
59
43
|
TableName:'test_table',
|
60
44
|
|
61
|
-
Key:{"eventId":t
|
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
|
-
|
61
|
+
// 今回修正した処理
|
78
62
|
|
79
|
-
t
|
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
|
-
|
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
|