Amazon DynamoDB DocumentClient()。get()使用函数外部的值

时间:2018-10-30 16:13:51

标签: javascript node.js amazon-dynamodb aws-sdk alexa

如何在data.Item.Name之外获得docClient.get()以便在其他功能中进一步使用它。

const docClient = new awsSDK.DynamoDB.DocumentClient();

docClient.get(dynamoParams, function (err, data) {
    if (err) {
        console.error("failed", JSON.stringify(err, null, 2));
    } else {
        console.log("Successfully read data", JSON.stringify(data, null, 2));
        console.log("data.Item.Name: " + data.Item.Name);
    }   
});

// how can i use "data.Item.Name" here:

console.log(data.Item.Name);
return handlerInput.responseBuilder
    .speak(data.Item.Name)
    .getResponse();

1 个答案:

答案 0 :(得分:1)

欢迎使用异步javascript。

您可以选择以下任一方式:

  • 在回调中继续执行逻辑
  • 重构您的代码以使用异步/等待

我将给出async / await选项的示例,但是您将需要在代码的其他区域进行一些重构以支持此操作。

async function wrapper() {
  const docClient = new awsSDK.DynamoDB.DocumentClient();

  docClient = require('util').promisify(docClient)

  var data = await docClient(dynamoParams);

  console.log(data.Item.Name);
  return handlerInput.responseBuilder
      .speak(data.Item.Name)
      .getResponse();
}

我假设您的代码位于名为wrapper的函数中。请注意,您需要为此功能添加async关键字。

它现在还返回一个诺言,因此要从wrapper获取返回值,您需要await(在调用它的代码部分中)。这意味着您还需要将async关键字添加到顶级函数中……依此类推。