Вызов getItem() для объекта DynamoDB из AWS Lambda, почему мой обратный вызов не выполняется?

Я пытаюсь получить предмет из моей базы данных DynamoDB. В настоящее время мой код написан так, что мне не удается получить какие-либо данные из DynamoDB. Я, должно быть, делаю что-то не так, потому что, насколько я могу судить по моему тесту, мой обратный вызов не вызывается.

Вчера я провел весь день в этом и безуспешно возился с этим с тех пор, как проснулся этим утром.

Если кто-нибудь может дать представление о том, что я делаю здесь неправильно, я был бы очень благодарен. Спасибо всем заранее!

Последнее замечание: время ожидания самой функции Lambda установлено на 5 минут. Поэтому я не думаю, что лямбда-функция истекает до того, как запрос БД может вернуться. Когда я запускаю функцию, она выходит через мгновение.

const AWS = require('aws-sdk');

const dynamodb = new AWS.DynamoDB();
var response = null;
var test = false;

function getFromDB(callback) {
  const params = {
    TableName: process.env['DB_TABLE_NAME'] // evaluates to 'test-table',
    Key: {
      "id": {
        S: postId // evaluates to a big string, pulling it in from an SNS message. Verified it with console.log(). It stores the expected value.
      }
    }
  };
  dynamodb.getItem(params, function(err, data) {
    if (err) callback(data, true);           // an error occurred
    else     callback(data, true);           // successful response
  });
}

getFromDB((data, isCalled) => {
    response = data;
    test = isCalled;
});

console.log(data); // evaluates to null
console.log(test); // evaluates to false

3 ответа

Я сталкивался с подобной проблемой. Я удалил async в приведенном ниже утверждении, чтобы решить:

exports.handler = async (event,context) 

Я думаю, что происходит то, что Lambda вызывает функцию, но она не собирается ждать обратного вызова, поэтому думает, что это сделано и завершается.

Я думаю, что у меня была похожая проблема, и я решил ее, используя Bluebird и async/await.

Я могу предоставить фрагмент из моего кода, если вам это нужно

Вы загрузили SDK? Я не вижу этого в вашем фрагменте кода

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});

РЕДАКТИРОВАТЬ: Включенный регион

Другие вопросы по тегам