首页 > 解决方案 > AWS DynamoDB JavaScript SDK 的返回值未定义

问题描述

我目前正在使用适用于 DynamoDB 的 JavaScript AWS 开发工具包,我正在尝试解析从 DynamoDB 调用中获得的数据,但它总是返回未定义的。它确实成功地打印了结果,但是尝试将该数据存储在变量中是不成功的。以下是我尝试这样做的方法。

const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
const dynamoDb = new AWS.DynamoDB({ apiVersion: "2012-08-10" });

const promisify = foo =>
  new Promise((resolve, reject) => {
    foo((error, result) => {
      if (error) {
        reject(error);
      } else {
        resolve(result);
      }
    });
  });

const params2 = {
  TableName: "Users",
  Key: {
    userID: { S: "123456789" },
  },
};

const test = params => {
  dynamoDb.getItem(params, function(err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      console.log("Success", data.Item);
      return data.Item;
    }
  });
};

let user = test(params2);
console.log("User:", user);

我相信这与 getItem 是异步的有关,我研究了如何在这段代码中实现一个承诺,但我无法获得正确的语法。非常感谢任何和所有帮助。谢谢你。

标签: javascriptamazon-web-servicesamazon-dynamodbaws-sdk-js

解决方案


你遇到的问题是你没有从你的test函数中返回任何东西。所以预计你会在外面得到 undefined 。

尝试这样做:

// used aws promise api https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-promises.html
function test(params) {
    return dynamoDb.getItem(params).promise();
}

test(params2).then(
    user => {
        console.log('User:', user);
    },
    error => {
        console.log('Error:', error);
    },
);

一些进一步阅读:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function


推荐阅读