Const speechText 未定义
Const speechText is undefined
我的 javascript 处理程序使用对 API 的调用和 returns 分配给常量 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();
}
};
request
是一个异步事件。因此,在请求发生时,您的 return
语句已被评估,因此 speechText
尚未设置。
此外,您在函数内部定义了 speechText
,这意味着它也不在 return
的范围内
我的 javascript 处理程序使用对 API 的调用和 returns 分配给常量 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();
}
};
request
是一个异步事件。因此,在请求发生时,您的 return
语句已被评估,因此 speechText
尚未设置。
此外,您在函数内部定义了 speechText
,这意味着它也不在 return
的范围内