在 setTimeout 中执行操作时,Alexa Skill 响应未显示任何内容

Alexa Skill response is showing nothing when doing in setTimeout

从今天开始卡住了。问题是这样的

var alexa = require('alexa-app');

// Define an alexa-app
var myapp = new alexa.app('myapp');

myapp.intent('WelcomeIntent', function(request,response) {
    console.log(request);
    response.say("This  is not working.<break time='2s'/>")
    setTimeout(function(){
            response.say("This  is inside timeout.")
    },1000);
});

在语音模拟器 Amazon Alexa 上,输出如下所示。

{
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "type": "SSML",
      "ssml": "<speak>This is not working.<break time='2s'/></speak>"
    },
    "shouldEndSession": false
  },
  "sessionAttributes": {}
}

请帮帮我。问题是异步函数内部的响应,如 Promise 或 setTimeout 或 fetch 或 google map API 我没有得到正确的响应。

所以我终于想出了解决办法。

在 alexa-app 框架中处理异步回调有两种方式。

使用低于 4.0.0 的版本

var alexa = require('alexa-app');

// Define an alexa-app
var myapp = new alexa.app('myapp');

myapp.intent('WelcomeIntent', function(request,response) {
    console.log(request);
    makePromiseBasedCallback(request,response);
    return false;
});
makePromiseBasedCallback.then(function(data){
    response.say(data.cardContent);
    response.send();
});

使用版本 4.0.0

关注 github link