Alexa会话属性不会在Intent函数中持久存在

时间:2017-09-21 16:19:05

标签: node.js alexa-skills-kit alexa-skill

我正在尝试传递从'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)变量将保持不变,但它是未定义的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在结束块中使用 emit

res.on('end', () => {
    this.emit('TellAJoke');
})

对于错误处理,请将其传递给未处理 SessionEndedRequest 意图。

  

使用 emitWithState('')代替    emit('')以转移到另一个意图。