2017-09-21 69 views
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)該變量將會持續,但它是未定義的。有任何想法嗎?

+0

您是否必須使用「this.emit」調用TellAJoke?你可以選擇將這個函數作爲TellAJoke(self)來調用,然後使用self.emit將該笑話告訴給用戶。 – Amit

+0

@Amit我改變了這整個流程。我相信這是一個異步的問題。 – ffritz

+0

在這種情況下,我相信你需要提供'.on('success',function(e){//在這裏調用tellajoke})' – Amit

回答

1

使用發出結束塊內。

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

對於錯誤處理將其傳遞到未處理SessionEndedRequest意圖。

使用emitWithState( '')代替 EMIT( '')上移動到另一個意圖。