使用Lambda与NodeJS从DynamoDB获取数据后无法访问JSON属性
问题排查与解决
核心问题
你在Lambda handler里调用异步函数pullone时没有使用await关键字,导致data变量实际是一个Promise对象,而非DynamoDB返回的JSON数据,因此无法直接通过.school或.sessionid访问属性。
修正后的代码
//Function to pull data from Dynamo DB (works) async function pullone(sessionid) { const params = { TableName: dynamodbTableName, Key: { 'sessionid': sessionid } }; try { const response = await dynamodb.get(params).promise(); return response.Item; } catch (error) { console.error('Do your custom error handling here. I am just gonna log it: ', error); } } //executing it exports.handler = async (event) => { let sessionid = "45883754" // 关键:添加await等待异步函数执行完成 let data = await pullone(sessionid) // 现在可以正常访问属性 console.log(data.school, data.sessionid); return data };
补充说明
- 异步函数(
async标记)的返回值默认是一个Promise,必须通过await或.then()来获取实际的resolved值。 - 原代码中
pullone里同时使用了await和.then(),可以简化为try/catch写法,逻辑更清晰。 - 加上
await后,data会被赋值为DynamoDB返回的response.Item,此时就能正常访问.school和.sessionid属性。
内容的提问来源于stack exchange,提问作者faba
相关产品推荐
相关产品推荐

