Проверьте, содержит ли таблица DynamoDB ключ, и верните логическое значение
Я только начал с Node.js и AWS DynamoDB, и я застрял с очень простой проблемой, которую я считаю. Я ищу способ вернуть логическое значение, если в таблице существует определенный ключ. Итак, вот код, который у меня есть:
const AWS = require('aws-sdk')
const TOKEN_TABLE = process.env.TOKENS_TABLE
const dynamoDb = new AWS.DynamoDB.DocumentClient()
module.exports = {
isValid: function (token) {
const params = {
TableName: TOKEN_TABLE,
Key:
{
token: token
}
}
var exists = false
dynamoDb.get(params, (error, result) => {
if (result.Item)
exists = true
else
exists = false
})
return (exists)
}
}
Когда я вызываю эту функцию, значение 'exist' никогда не меняется после того, как было объявлено, даже если искомый элемент находится в таблице. Я смотрел на подобные вопросы, и ни один из них не мог действительно помочь мне или хотя бы объяснить, почему это происходит. Спасибо
1 ответ
Во-первых, DynamoDb.get возвращает обещание. Поэтому вы возвращаетесь "существует" до того, как ваше обещание закончится и вернется. То, что я нашел лучшим и самым чистым способом для этого, - сделать вашу функцию асинхронной и дождаться возврата обещания.
Например,
const AWS = require('aws-sdk')
const TOKEN_TABLE = process.env.TOKENS_TABLE
const dynamoDb = new AWS.DynamoDB.DocumentClient()
module.exports = {
isValid: async function (token) {
const params = {
TableName: TOKEN_TABLE,
Key:
{
token: token
}
}
var exists = false
let result = await dynamoDb.get(params).promise();
if (result.Item !== undefined && result.Item !== null) {
exists = true
}
return (exists)
}
}