【问题标题】:Async Lambda function returning null on calling DynamoDB异步 Lambda 函数在调用 DynamoDB 时返回 null
【发布时间】:2020-01-24 02:26:16
【问题描述】:

我是异步函数和承诺的新手。我编写了一个 Lambda 函数来查询 DynamoDB 表并返回结果。代码在回调成功块内执行,我可以从 console.log(res) 行看到日志中的响应。但是 Lambda 响应始终显示为 null,即根本不返回下面的响应对象。我能够使用同步 Lambda 函数来完成这项工作,该函数使用回调返回数据。您能否建议我可能做错了什么。

const doc = require('dynamodb-doc');
var dynamodbclient;
const tablename = process.env.TABLE_NAME;

exports.handler = async(event) => {

    if (!dynamodbclient) {
        dynamodbclient = new doc.DynamoDB();
    }

    let id = event.params.id;
    let queryparams = {
        TableName: 'table-name',
        Key: { id: id }
    };[![enter image description here][1]][1]

    var getItemsCallback = (err, res) => {
        console.log('inside');
        if (err) {

        }
        else {
            console.log('success');
            console.log(res);
            const response = {
                statusCode: 200,
                body: JSON.stringify('Hello from Lambda!'),
            };
            return response;
        }
    };

    var item = await dynamodbclient.getItem(queryparams, getItemsCallback).promise();
};

【问题讨论】:

  • 你想await getItem(queryParams).promise().then(getItemsCallback)

标签: aws-lambda dynamodb-queries


【解决方案1】:

在 promise 解决后,您的回调仍在执行,因此 lambda 将终止并且您的回调不会完成。

试试:

try {
    const item = await dynamodbclient.getItem(queryparams).promise();
} catch (err) {}

console.log('success');
console.log(item);
const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
};
return response;

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 2020-10-23
    • 2014-10-29
    • 2019-07-31
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多