我正在尝试使用异步/等待功能,涉及aws和dynamo。下面是一个示例,说明如何将一个对象预先等待,正如您在回调中看到的,您可以访问包含put对象的数据。但是,在使用异步并承诺结果为空对象的第二个代码块中,有什么想法吗?
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));
}
});承诺异步版本-假设包装功能被标记为异步
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) 发布于 2019-03-14 19:56:10
根据文档,如果您想要拿回什么东西,就必须使用ReturnValues。
发布于 2019-03-14 18:09:01
当您使用承诺时,您应该使用.then()和.catch()来处理返回的允诺对象。如果你看一下文档,您的请求应该如下所示:
dynamoDb.put(params).promise()
.then(function(data) {
console.log(data);
})
.catch(function(err) {
console.log(err);
});这还将帮助您查看是否有任何错误(与尝试/捕捉围绕等待的想法相同,但语法更清晰)。
发布于 2020-07-16 10:58:31
我试过ReturnValues: 'ALL_OLD',但在async await中没有结果。
下面是代码的一部分:
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',
};
}
}因此,我不得不向db添加另一个请求:
const createdAnswres = await db.get({
TableName: ANSWERS_TABLE,
Key: { answersId },
})
.promise();https://stackoverflow.com/questions/55166921
复制相似问题