handlerInput.responseBuilder返回之前,我可以从可观察到的获取数据

时间:2018-12-28 18:56:24

标签: javascript node.js rxjs alexa

我正在从可观察的角度获取有关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。

1 个答案:

答案 0 :(得分:0)

您的句柄应为async handleawait data.subscribe也应异步。为此,您需要在data.subscribe中使用Promise。

这样做会等到请求准备就绪。