我正在从可观察的角度获取有关alexa技能的数据,我面临的问题是,在我可以获取数据之前发送了对alexa的响应。
我正在使用ask cli和nodejs
const GetReminderIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'GetReminderIntent';
},
handle(handlerInput) {
let speechText = "";
data
.subscribe(data=>{
entities = data.Entities;
entities.forEach(entity => {
med = entity.Text;
attributes = entity.Attributes;
attributes.forEach(attribute=>{
if(attribute['Type']=='DOSAGE')
dosage = attribute['Text'];
if(attribute['Type']=='FREQUENCY')
freq = attribute['Text'];
})
response.push({
medicineName:med,
dosage:dosage,
frequency:freq
})
});
speechText = response[0].medicineName;
//Just a mock use case, still have to restructure the data a bit
}, err =>{
speechText = err;
})
return handlerInput.responseBuilder
.speak(speechText)
.withSimpleCard('Reminder', speechText)
.getResponse();
}
},
};
结果只是一个空字符串。我需要一种方法来等待可观察对象获取数组“ response”中的数据,然后再将“ speechText”发送给Alexa。
答案 0 :(得分:0)
您的句柄应为async handle
,await data.subscribe
也应异步。为此,您需要在data.subscribe中使用Promise。
这样做会等到请求准备就绪。