我正在尝试传递从'LaunchRequest'
到'TellAJoke'
意图的字符串数组。
我的问题是this.attributes['joke']
函数中'TellAJoke'
始终未定义。
'LaunchRequest': function() {
var url = "https://www.reddit.com/r/jokes/top.json?limit=1";
var self = this;
var request = https.get(url, function(res) {
var body = '';
res.on('data', function(chunk){
body += chunk;
});
res.on('end', function(){
var redditResponse = JSON.parse(body);
redditResponse['data'].children.forEach(function(child) {
jokeArray.push({
title: child.data.title,
text: child.data.selftext
});
});
// Assinging the filled jokeArray to the session variable
self.attributes['joke'] = jokeArray;
self.emit(':saveState', true);
}).on('error', function(e){
self.emit(':tell', "Error");
console.log("Got an error: ", e);
});
this.emit('TellAJoke');
});
},
'TellAJoke': function() {
this.attributes['randomNumber'] = Math.floor(Math.random() * 8) +0;
//This prints undefined
console.log(this.attributes['joke']);
},
现在,我已经在这里阅读了类似的问题,但我没有足够的答案来解释那里发生的事情。基本上,我希望由于this.emit(':saveState', true)
变量将保持不变,但它是未定义的。有什么想法吗?
答案 0 :(得分:1)
在结束块中使用 emit 。
res.on('end', () => {
this.emit('TellAJoke');
})
对于错误处理,请将其传递给未处理或 SessionEndedRequest 意图。
使用 emitWithState('')代替 emit('')以转移到另一个意图。