J'essaie d'utiliser la fonctionnalité async/await en ce qui concerne aws et dynamo db. Vous trouverez ci-dessous un exemple de la façon de mettre un objet pré asyn wait, comme vous pouvez le voir dans le rappel, vous avez accès aux données qui contiennent l'objet put. Cependant, dans le deuxième bloc de code qui utilise async et promesse, le résultat est un objet vide, des pensées?

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

Version sans promesse

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

Promettre une version asynchrone : supposez que la fonction d'emballage est marquée asynchrone

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) 
19
Mingo 14 mars 2019 à 18:54

3 réponses

Meilleure réponse

Selon la doc vous devez utiliser ReturnValues si vous voulez récupérer quelque chose.

12
Gabriel Bleu 14 mars 2019 à 19:56

J'ai essayé ReturnValues: 'ALL_OLD' mais dans async await il n'a aucun résultat.

Voici une partie du code :

const answersParams = {
          TableName: ANSWERS_TABLE,
          Item: {
            answersId,
            answers,
            userId,
            quizId,
          },
          ReturnValues: 'ALL_OLD',
        };

        try {
          const createdAnswres = await db.put(answersParams).promise();

          return {
            statusCode: 201,
            body: JSON.stringify(createdAnswres && createdAnswres.Item),
          };
        } catch (error) {
          return {
            statusCode: 500,
            body: 'failed to save user answers',
          };
        }
      }
    

J'ai donc dû ajouter une autre requête à db :

const createdAnswres = await db.get({
              TableName: ANSWERS_TABLE,
              Key: { answersId },
            })
            .promise();
    

1
Aleks Barylo 16 juil. 2020 à 10:58