【发布时间】:2021-12-20 22:13:33
【问题描述】:
我有一个使用 NodeJS 的 AWS Lambda 函数设置,它使用 pg-promise 库调用 postgres 数据库以检索数据 - 然后发送 HTTPS GET 请求等,但其余的都不重要。
我最初使用的是“pg”库,但遇到了连接关闭和异步问题,这就是我切换到 pg-promise 的原因(这确实解决了我的另一个问题!)。使用常规 pg 库,我的预期延迟为
我已将代码归结为一个简单的查询,我从最近 3 次测试运行中获得了这些响应时间:11790.78 毫秒、11232.22 毫秒、12002.04 毫秒。每次超过 10000ms...
编辑:固定代码
const pgp = require('pg-promise')();
const https = require('https');
const xmlParser = require('xml2js').Parser();
const client = pgp({
database: process.env.DATABASE,
host: process.env.HOST,
port: process.env.PORT,
user: process.env.USERNAME,
password: process.env.PASSWORD
});
exports.handler = function(event, context, callback) {
client.one("SELECT period FROM pay WHERE company='XXX' ORDER BY moddate DESC LIMIT 1;")
.then(function(data) {
callback(null, {
"statusCode": 200,
"headers": {
'Content-Type' : 'application/json'
},
"body": data.period
});
})
.catch(function(error) {
console.error(error);
});
};
如上所述,我在使用“pg”库时没有遇到延迟问题,所以我知道 lambda-RDS postgres 连接没有问题。
有人知道这是为什么吗?
谢谢,
【问题讨论】:
-
我想知道您是否可以尝试直接调用connect...知道它是打开连接还是实际查询花费了这么多时间会很有趣。您的
callback也不应该在您的.then内...或者切换到await承诺?现在你将在你的承诺有机会解决之前执行callback...不确定这对 Lambda 有什么影响。 -
请参阅async example,了解如何使用 Promise 编写此代码。或者重写它,使处理程序不是异步的,并且回调在
then和catch处理程序中执行。目前,代码对于任一场景(异步或回调)都不正确。 -
@David784 谢谢。我更新了提供的代码示例以反映回调的正确处理。然而,问题仍然存在。我去做你推荐的连接测试,看看结果如何
-
@jarmod 谢谢我已经更新了代码,但是问题仍然存在
标签: node.js postgresql amazon-web-services pg-promise