我刚开始使用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)
}
}
当我调用此函数时,即使我要查找的项目在表中,“ exists”的值在声明后也不会改变。我看过类似的问题,但这些问题都无法真正帮助我,或者至少可以解释为什么会这样。谢谢
答案 0 :(得分:0)
首先,dynamoDb.get返回一个Promise。因此,您在诺言完成并返回之前就返回“存在”。我发现最好的方法和最干净的方法是使您的函数异步并等待promise的返回。
例如,
cmake_minimum_required(VERSION 3.12)
project(PistacheExample)
set(CMAKE_CXX_STANDARD 11)
############################
## SOURCE FILES ##
############################
add_executable(${PROJECT_NAME} src/main.cpp)
#####################################
## HEADERS SEARCH PATHS ##
#####################################
set(PROJECT_INCLUDE_DIR "src/include")
set(PISTACHE_INCLUDE_DIR "libs/pistache/include")
set(HEADER_SEARCH_PATHS ${PROJECT_INCLUDE_DIR} ${PISTACHE_INCLUDE_DIR})
#####################################
## LIBRARY SEARCH PATHS ##
#####################################
set(PISTACHE_LIBRARY "${PROJECT_SOURCE_DIR}/libs/pistache/lib/libpistache.a")
set(EXTRA_LIBRARY "-pthread -lssl")
set(LIBRARIES_SEARCH_PATHS ${PISTACHE_LIBRARY} ${EXTRA_LIBRARY})
#######################################
## ADDING HEADERS LIBRARY ##
#######################################
include_directories(${HEADER_SEARCH_PATHS})
target_link_libraries(${PROJECT_NAME} ${LIBRARIES_SEARCH_PATHS})