gpt4 book ai didi

node.js - 尝试访问数据时 DynamoDB 查询功能不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:50 26 4
gpt4 key购买 nike

所以我尝试使用下面的代码从 dynamodb 获取数据,我得到 null 并且在调用查询函数后没有显示日志。

我在本地尝试过,它在本地工作,仅通过 lambda 函数它不起作用,我还检查了我的角色是否有读取 dynamodb 的权限,确实如此。所以我对此一无所知

"use strict";

const config = require("./config");
const AWS = require("aws-sdk");

AWS.config.update({
region: "us-east-1"
});
let dynamodb = new AWS.DynamoDB.DocumentClient({
region: "us-east-1"
});

var getAnswerToQuestion = (questionKey, callback) => {

var params = {
TableName: "genral-questions-db",
KeyConditionExpression: "#questionKey = :question",
ExpressionAttributeNames: {
"#questionKey": "question"
},
ExpressionAttributeValues: {
":question": String(questionKey)
}
};
console.log("Trying to query dynamodb");

dynamodb.query(params, (err, data) => {
if(err) {
console.log (err)
callback(err);
} else {
console.log(data.Items);
callback(data.Items[0]);
}
});
}

module.exports = {
getAnswerToQuestion
};

日志:

Function Logs:
START RequestId: 6adeddbe-4925-4877-a2c0-d20576145224 Version: $LATEST
2019-09-22T17:35:30.088Z 6adeddbe-4925-4877-a2c0-d20576145224 event.bot.name=bcbsri
2019-09-22T17:35:30.088Z 6adeddbe-4925-4877-a2c0-d20576145224 dispatch userId=pn6yexoq87uej2evt9huhilc5f99bhb7, intentName=GenralQuestionIntent
2019-09-22T17:35:30.088Z 6adeddbe-4925-4877-a2c0-d20576145224 GenralQuestionIntent was called - Srinivas
2019-09-22T17:35:30.089Z 6adeddbe-4925-4877-a2c0-d20576145224 have to query the db hsa
2019-09-22T17:35:30.089Z 6adeddbe-4925-4877-a2c0-d20576145224 Trying to query dynamodb
END RequestId: 6adeddbe-4925-4877-a2c0-d20576145224
REPORT RequestId: 6adeddbe-4925-4877-a2c0-d20576145224 Duration: 596.83 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 193.27 ms

甚至没有收到错误,它只是不返回任何数据。请帮我解决这个问题

编辑:这是我尝试调用 utils 方法(db)的代码

module.exports =  function(intentRequest) { 
return new Promise((resolve, reject) => {

// Resolve question key
const questionKey = intentRequest.currentIntent.slots.QuestionKey;

let speechText;

console.log('have to query the db', questionKey);

utils.getAnswerToQuestion(questionKey, res => {
if(res ) {
speechText = res.answer;
} else {
speechText = "Sorry, details about " + questionKey + " was not found";
}

const response = {
fullfilmentState: 'Fulfilled',
message: { contentType: 'PlainText', content: speechText }
};
console.log(response);

resolve(response);
return lexResponses.close(intentRequest.sessionAttributes, response.fullfilmentState, response.message);
});
});
};

最佳答案

我敢打赌,这是人们在将 Node.js 与 Lambda 结合使用时遇到的最常见问题。

当 Node.js Lambda 到达主线程末尾时,它会结束所有其他线程。当它到达处理程序的末尾时,它会停止所有正在运行的并发 Promise 或异步调用。

要确保 lambda 不会过早终止这些线程,请使用 await 等待这些 Promise 完成。

在您的情况下,请对任何 AWS 请求使用 .promise() 方法,然后等待它们:

try {
const data = await dynamodb.query(params).promise();
console.log(data.Items);
callback(data.Items[0]);
} catch (err) {
console.log(err);
callback(err);
}

关于node.js - 尝试访问数据时 DynamoDB 查询功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com