javascript - 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 是异步的有关,我研究了如何在这段代码中实现一个承诺,但我无法获得正确的语法。非常感谢任何和所有帮助。谢谢你。
解决方案
你遇到的问题是你没有从你的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
推荐阅读
- java - Java 图形不会删除线条,即使我调用 super.paintComponent(g)
- c# - CurrentItem 在 iOS 上不工作,但在 Android 上工作
- r - 如何将实时进度数据传递到 Flexdashboard 中的块?
- java - 无法从其他设备访问 Spring 服务器
- character - 如何在 R 数据中排除字符并仅包含数字
- html - 无法使 html5 背景视频响应
- python-3.x - 当我尝试使用 HashingVectorizer 时,Dask client.persist 返回 AssertionError
- hbase - Google Cloud Bigtable:用Java查询多个前缀扫描
- react-native - 如何让我的 expo 应用出现在另一个应用的分享列表中?
- vue.js - 想要访问使用 v-file-input 上传的文件