我编写了以下代码来连接包含在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');
})()
答案 0 :(得分:2)
这与async
/ await
无关,也没有。正如@Torazaburo在评论中所述,db驱动程序维护与数据库的开放连接,并且此打开的套接字(及其事件处理程序)可防止节点退出。关闭连接有助于:
function connectDB() {
return new Promise (resolve => {
MongoClient.connect(mongoUrl, function(err, db) {
if (err) reject(err);
else resolve(db);
});
});
}
(async function crawl() {
const db = await connectDB();
console.log('You are connected');
db.close();
console.log('You are no longer connected. Bye!');
})()
答案 1 :(得分:-2)
承诺有2个参数:解决并拒绝。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
您需要更改承诺声明:
return new Promise ((resolve, reject) => {
// ...
}
之后,将return语句添加到您的承诺中:
return resolve(db)
另外,我建议你在你的诺言中添加一个错误日志:
if (err) return reject(err)
并发现此错误。
祝你好运!