如何在MongoDB驱动程序中调用then()块和finally()块中的异步函数?

to94eoyn  于 2022-11-28  发布在  Go
关注(0)|答案(1)|浏览(103)

我正在Node.js中学习MongoDB。我有一个main函数,它返回指向所需集合的collection对象。

main()
    .then((collection) => {
        findDocs(collection)
    })
    .catch(console.error);
    .finally(() => client.close());

我通过传递collection对象来调用findDocs函数。但这会失败,并返回PoolClosedError [MongoPoolClosedError]: Attempted to check out a connection from closed connection pool错误。但如果我删除finally()块,它会正常工作,但数据库连接不会关闭,正如任何人所预料的那样。
是否有解决此问题的方法或更好地调用回调async函数的建议?

eyh26e7m

eyh26e7m1#

您必须使用async-await来解决问题:
这里一个例子

main()
    .then(async (collection) => {
        await findDocs(collection)
    })
    .catch(console.error);
    .finally(() => client.close());

或者在调用main函数的函数中使用try-catch闭包,而不是使用then/catch闭包:
示例:

async function index(){
  try{
   const collection = await main();
   const docs = await  findDocs(collection)

  }catch(e){
    console.error(e)
  }finally{
    client.close()
  }

}

另一个选项是在findDocs结束时关闭客户端:

main()
  .then((collection) => {
    findDocs(collection)
      .catch(console.error)
      .finally(() => client.close());
  })
  .catch(console.error);

相关问题