Respone.say在Alexa Skill的Promise中无效

时间:2017-06-27 11:47:41

标签: alexa alexa-app

我正在使用nodejs开发Alexa Skill。 当我想得到一个回复​​时,我在尝试使用response.say(值)时得不到任何消息。但是当尝试使用console.log(value)时,我会得到正确的响应。

alexaApp.intent("Plot", {
    "slots": { "Titel": "String"},
    "utterances": ["Wovon handelt {Titel}"]
},          
function(request, response) {
    var titel = request.slot("Titel");
    geturl(titel,1).then((speech) => {
        console.log(speech); //right string
        response.say(speech); //nothing
    });
});

任何想法如何让它运作?我正在使用promises导致节点异步以及时获取我的请求。

2 个答案:

答案 0 :(得分:0)

您应该使用同步调用来获取请求。这里有一个例子:

   var http = require('bluebird').promisifyAll(require('request'), { multiArgs: true });

   app.intent('search', {
    "utterances": [
        "search ",
    ]

  },
  function(request, response) {

    return http.getAsync({ url: url, json: true}).spread(function(statusCodesError, result) {

     console.log(result)

    });


})

答案 1 :(得分:0)

您确实需要使用异步调用,并返回承诺。

var http = require('bluebird').promisifyAll(require('request')
   alexaApp.intent("Plot", {
    "slots": { "Titel": "String"},
    "utterances": ["Wovon handelt {Titel}"]
},          
function(request, response) {
    var titel = request.slot("Titel");
    return http.getAsync(titel,1)
         .then((speech) => {
              return response.say(speech); 
         }).catch(function(err){
             return response.say(err);
         });