我有一个lambda函数,该函数连接到mongodb数据库并从数据库中流式传输一些记录。
exports.handler = (event, context, callback) => {
let url = event.mongodbUrl;
let collectionName = event.collectionName;
MongoClient.connect(url, (error, db) => {
if (error) {
console.log("Error connecting to mongodb: ${error}");
callback(error);
} else {
console.log("Connected to mongodb");
let events = [];
console.log("Streaming data from mongodb...");
let mongoStream = db.collection(collectionName).find().sort({ _id : -1 }).limit(500).stream();
mongoStream.on("data", data => {
events.push(data);
});
mongoStream.once("end", () => {
console.log("Stream ended");
db.close(() => {
console.log("Database connection closed");
callback(null, "Lambda function succeeded!!");
});
});
}
});
};
当流结束时,我关闭数据库连接并调用应终止lambda函数的回调函数。这在本地使用node-lambda起作用,但是当我尝试在AWS lambda中运行它时,我得到了所有日志,包括console.log("Database connection closed");
通过日志,但是似乎未调用回调,因此尽管最后一个回调函数总是超时日志发生在超时前几秒钟。
我可以强迫它结束使用context.succeed()
,但是在使用节点版本4时似乎已弃用,因此我想避免使用它。如何停止此功能在AWS Lambda中超时?
在处理程序函数的开头添加以下行:
context.callbackWaitsForEmptyEventLoop = false
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句