正确终止NodeJS Async Await

时间:2017-05-17 05:38:42

标签: javascript node.js asynchronous async-await

我编写了以下代码来连接包含在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');
})()

2 个答案:

答案 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)

并发现此错误。

祝你好运!