1

我正在使用 nodejs 开发 Alexa Skill。当我想得到回应时,我在尝试使用 response.say(value) 得到回应时没有收到任何消息。但是当尝试使用 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
    });
});

任何想法如何让它工作?我正在处理节点异步的承诺,以便及时获取我的请求。

4

2 回答 2

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);
         });
于 2017-06-28T00:07:26.900 回答
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)

    });


})
于 2017-06-27T15:15:46.663 回答