DyanmoDB获取功能alexa技能范围问题

时间:2019-03-13 23:22:21

标签: node.js scope amazon-dynamodb alexa

我在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();
    },
 }; 

1 个答案:

答案 0 :(得分:0)

我认为这不是范围问题。我认为,由于DBClient.get()方法是异步的,因此在执行DBCLient.get()方法内的回调之前,将执行return语句。