2017-06-27 4 views
0

ich arbeite an einem Alexa Skill mit nodejs. Wenn ich eine Antwort erhalten möchte, bekomme ich keine Nachricht, wenn ich versuche, sie mit response.say (value) zu bekommen. Aber wenn ich mit console.log (value) versuche, bekomme ich die richtige Antwort.Respone.say funktioniert nicht in Promise für Alexa Skill

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 
    }); 
}); 

Irgendwelche Ideen, wie es funktioniert? Ich arbeite mit Versprechungen wegen der asynchronen Knoten, um meine Anfragen rechtzeitig zu bekommen.

Antwort

0

sollten Sie einen synchronen Aufruf verwenden, um eine Anforderung zu erhalten. Hier ein Beispiel:

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) 

    }); 


}) 
0

Sie müssen einen Async-Aufruf verwenden und das Versprechen zurückgeben.

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); 
     }); 
Verwandte Themen