【问题标题】:Amazon DynamoDB DocumentClient().get() use values outside of functionAmazon DynamoDB DocumentClient().get() 使用函数之外的值
【发布时间】:2018-10-30 16:13:50
【问题描述】:

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

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();

【问题讨论】:

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


【解决方案1】:

欢迎使用异步 javascript。

您的选择是:

  • 在回调中继续你的逻辑
  • 重构您的代码以使用 async/await

我将为 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 关键字添加到顶级函数......等等。

【讨论】:

  • 抱歉耽搁了这么久。当我问这个问题时,我不知道 javascript 中的异步。那时你的回答肯定会对我有所帮助。无论如何,谢谢您的澄清!
  • 现在你可以做var result = await docClient.get(dynamoParams).promise()
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2019-04-26
相关资源
最近更新 更多