【问题标题】:Drop Collection Before Closing Connection Using Async and Await Javascript在使用 Async 和 Await Javascript 关闭连接之前删除集合
【发布时间】:2018-08-16 05:47:06
【问题描述】:

我正在尝试在加载数据之前清除数据库中的集合,然后关闭连接。我正在使用 MongoDB 和 Mongoose 作为数据库。我的代码如下:

function closeConnection() {
  return mongoose.connection.close()
}

function dropCollections() {
  return People.collection.drop()
}

async function doItAll() {
  await dropCollections()
  await closeConnection()
}

doItAll()

People 是猫鼬模型。我的印象是,await 语句会等待初始承诺解决,然后再继续,但发生的情况是与数据库的连接在删除集合之前关闭。实现这一目标的正确方法是什么?我可以使用 async 和 await 吗?

我注意到的一件事是People.collection.drop() 返回未定义,但结果不应该在连接关闭之前解决吗?

【问题讨论】:

  • mongoose.connection.close()People.collection.drop() 返回一个承诺?如果不是,那么 await 对您没有任何用处 - async/await 是 Promise 的“语法糖”,而不是异步的包罗万象
  • mongoose.connection.close 会,但People.collection.drop() 不会。我怎样才能在收盘前“等待”下跌呢?看起来它的行为是异步的
  • 你需要“承诺”People.collection.drop
  • 好的,我试试 Node 的util.promisify
  • 根据the docsdrop 确实返回了一个承诺?

标签: javascript mongodb mongoose async-await


【解决方案1】:

尝试一次,如果还没有解决:

async function closeConnection() {
  return mongoose.connection.close();
}

async function dropCollections() {
  return People.collection.drop();
}

async function doItAll() {
  const result = await dropCollections();
  if (result) console.log("Collection dropped");
  await closeConnection();
}

doItAll();

await 关键字将“等待”Promise 函数。由于collection.drop() 是Promise 而dropCollections() 不是,因此您可以将其声明为类promise 函数,这样就达到了目的。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多