【发布时间】:2017-05-25 04:17:15
【问题描述】:
我编写了以下代码以连接到包装在 Promise 中的 MongoDB,但是一旦连接,我的 NodeJS 代码仍在运行/无法正确退出。我可以知道返回或终止它的正确方法是什么吗?
function connectDB() {
return new Promise (resolve => {
MongoClient.connect(mongoUrl, function( err, db ) {
_db = db;
resolve(db);
});
})
}
(async function crawl() {
const db = await connectDB();
console.log('You are connected');
})()
【问题讨论】:
-
大多数数据库驱动程序在您第一次连接到数据库后会保持与数据库的开放连接。这是一项性能优化,值得一试,因为如果您需要为每个请求继续连接到数据库,您可能会损失超过 50% 的吞吐量。因此,仍然有一个打开的套接字以及事件处理程序来处理来自该套接字的数据。这就是节点不退出的原因。完成后尝试关闭 MongoClient 连接
-
我认为问题不在于异步/等待。当您放弃承诺并调用
MongoClient.connect时,节点是否正确退出? -
是的。调用 db.close() 可以解决问题,谢谢! @slebetman 你想把它作为我标记的解决方案吗?
标签: javascript node.js asynchronous async-await