我在Alexa代码中使用的DynamoDB函数遇到范围问题(一般来说,我对NodeJS很陌生) 以下代码是我的启动处理程序,并且在处理程序内部有一个名为x的变量。我试图将x设置为我从dynamoDB获取的数据,并在get函数之外使用它,以便Alexa可以说出来(如您在返回中所看到的)。我的get函数中的语句未在get函数本身之外更改x的值。换句话说,我的get函数外部的x似乎与get内部的x变量分开。我知道get函数内部的x实际上已被更改,因为我正在将它记录到控制台。另外,我尝试将return语句放入get函数(在else块中),但这没用
const LaunchHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === `LaunchRequest`;
},
handle(handlerInput) {
let x = "";
DBClient.get(params, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:",
JSON.stringify(err, null, 2));
} else {
x = data.Item.Answer; //this is functioning properly, I am getting the data I want from the database, it is a string
} });
return handlerInput.responseBuilder
.speak(x)
.withShouldEndSession(false)
.getResponse();
},
};
答案 0 :(得分:0)
我认为这不是范围问题。我认为,由于DBClient.get()方法是异步的,因此在执行DBCLient.get()方法内的回调之前,将执行return语句。