Проверьте, содержит ли таблица DynamoDB ключ, и верните логическое значение - PullRequest
0 голосов
/ 05 декабря 2018

Я только начал с 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 Ответ

0 голосов
/ 05 декабря 2018

Во-первых, 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)
    }
}
...