Const speechText未定义

时间:2018-05-22 19:51:00

标签: javascript alexa-skills-kit

我的javascript处理程序使用对API的调用,并返回一个文本字符串(正文),该字符串被赋值给const speechText。但正如您在日志结果中看到的那样,最初speechText会抛出一个错误,因为它没有定义,但是当调用request.get方法时,它似乎返回了正确的结果。

这是一个异步问题,如果是这样,我如何重构代码以在需要时给出结果(正文)?我认为代码在结果从API调用返回之前执行return handlerInput.responseBuilder

这是我的代码:

const NumberIntentHandler = {

    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
          && handlerInput.requestEnvelope.request.intent.name === 'NumberIntent';
    },

     handle(handlerInput) {
        console.log('At NumberIntentHandler');

        let slotNum = handlerInput.requestEnvelope.request.intent.slots.number.value;

        const url = `http://numbersapi.com/${slotNum}`;
        console.log('url: ', url);

        request.get(url, (error, response, body) => {
            console.log('error: ', error); // Print the error if one occurred
            console.log('statusCode: ', response && response.statusCode); // Print the response status code if a response was received
            console.log('body: ', body); // Print the body 

            const speechText = body;
            console.log('speechText: ', speechText); // Print the speechText     
        });

        return handlerInput.responseBuilder
          .speak(speechText)
          .withSimpleCard('Here is your fact: ', speechText) 
          .getResponse();
     }
};

Log results

1 个答案:

答案 0 :(得分:0)

request是一个异步事件。因此,在请求发生时,您的return语句会被评估,因此speechText尚未设置。

此外,您定义函数内部的speechText,这意味着它不会在return范围内