我的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();
}
};
答案 0 :(得分:0)
request
是一个异步事件。因此,在请求发生时,您的return
语句会被评估,因此speechText
尚未设置。
此外,您定义函数内部的speechText
,这意味着它不会在return
范围内