Dynamodb.put (). обещание () не возвращая положенный объект - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь использовать функциональность async / await в отношении aws и динамо-базы данных. Ниже приведен пример того, как предварительно поместить асинхронное ожидание объекта, как вы можете видеть в обратном вызове, у вас есть доступ к данным, которые содержат объект put. Однако во втором блоке кода, который использует async и обещает, что результатом будет пустой объект, есть мысли?

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html

Версия без обещаний

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "Movies";

var year = 2015;
var title = "The Big New Movie";

var params = {
    TableName:table,
    Item:{
        "year": year,
        "title": title,
        "info":{
            "plot": "Nothing happens at all.",
            "rating": 0
        }
    }
};

console.log("Adding a new item...");
docClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));
    }
});

Версия Promise async - предположим, что функция переноса помечена как async

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "Movies";

var year = 2015;
var title = "The Big New Movie";

var params = {
    TableName:table,
    Item:{
        "year": year,
        "title": title,
        "info":{
            "plot": "Nothing happens at all.",
            "rating": 0
        }
    }
};
const result: any = await dynamoDb.put(params).promise()
console.log(result) 

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Согласно документу вы должны использовать ReturnValues, если хотите что-то вернуть.

2 голосов
/ 14 марта 2019

Когда вы используете обещания, вы должны обработать возвращенный объект обещания, используя .then () и .catch (). Если вы посмотрите на документацию , ваш запрос должен выглядеть следующим образом:

dynamoDb.put(params).promise()
  .then(function(data) {
    console.log(data);
  })
  .catch(function(err) {
    console.log(err);
  });

Это также поможет вам увидеть, если вы получаете какую-либо ошибку (та же идея, что и при ожиданиис try / catch, но с более четким синтаксисом)

...