Respone.say не работает в Promise для Alexa Skill

Я работаю над Alexa Skill с nodejs. Когда я хочу получить ответ, я не получаю никакого сообщения при попытке получить его с помощью 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
    });
});

Любые идеи, как заставить его работать? Я работаю с обещаниями из-за асинхронности узла, чтобы своевременно получать мои запросы.


person Ricardo Schmitz    schedule 27.06.2017    source источник


Ответы (2)


вы должны использовать синхронный вызов для получения запроса. вот пример:

   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)

    });


})
person Wejd DAGHFOUS    schedule 27.06.2017

Вам нужно использовать асинхронный вызов и вернуть обещание.

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);
         });
person joshbenner851    schedule 28.06.2017