Проверьте, содержит ли таблица 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)
    }
}

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