我正在使用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导致节点异步以及时获取我的请求。
答案 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);
});