Асинхронная лямбда-функция, возвращающая ноль при вызове DynamoDB - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в асинхронных функциях и обещаниях.Я написал лямбда-функцию, которая запрашивает таблицу DynamoDB и возвращает результат.Код выполняется внутри блока успешного завершения обратного вызова, и я вижу ответ в журнале из строки console.log (res).Однако лямбда-ответ всегда отображается как ноль, то есть объект ответа ниже не возвращается вообще.Я смог сделать эту работу, используя функцию синхронного лямбда, используя обратный вызов для возврата данных.Подскажите, пожалуйста, что я могу делать неправильно.

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

1 Ответ

0 голосов
/ 24 сентября 2019

Ваш обратный вызов по-прежнему выполняется после разрешения обещания, поэтому лямбда будет прервана, а ваш обратный вызов не закончится.

Попробуйте:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...