0
我想从'LaunchRequest'
到'TellAJoke'
意图的字符串数组传递。Alexa会话属性不持续跨意图功能
我的问题是,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)
该变量将会持续,但它是未定义的。有任何想法吗?
您是否必须使用“this.emit”调用TellAJoke?你可以选择将这个函数作为TellAJoke(self)来调用,然后使用self.emit将该笑话告诉给用户。 – Amit
@Amit我改变了这整个流程。我相信这是一个异步的问题。 – ffritz
在这种情况下,我相信你需要提供'.on('success',function(e){//在这里调用tellajoke})' – Amit