我正在兑现承诺,我拥有以下代码来访问我的mongodb:
MongoClient.connect(url, { useUnifiedTopology: true })
.then(client => {
const db = client.db(dbName);
return db.collection('dogs');
})
.then(collection => collection.find().toArray())
.then(array => console.log(array))
// Client is not defined, how do I access it?
.finally(() => client.close())
.catch(error => {
console.log(error);
});
我无法访问client
内部的finally
。有没有实现这一目标的好模式?
答案 0 :(得分:3)
您可以使用async / await:
const client = await MongoClient.connect(url, { useUnifiedTopology: true })
const db = client.db(dbName);
const dogs = db.collection('dogs');
...
当您执行诸如find之类的操作时,您可以await
进行操作或像以前那样使用then。如果您对承诺不是很有信心,那么asyn/await
对您来说可能会更清晰。
您还可以在那时等待链式承诺...
使用async / await,您可以使用try / catch / finally,对于您来说这可能是一个更简单的解决方案。
答案 1 :(得分:1)
您可以使用async函数包装代码以使用await,并在try和catch之前创建变量以保存客户端,代码如下:
const functionName = async () => {
let client;
try {
client = await MongoClient.connect(url, { useUnifiedTopology: true });
const db = client.db(dbName);
const collection = db.collection("dogs");
const array = collection.find().toArray();
console.log(array);
} catch (error) {
console.log(error);
} finally {
client.close();
}
};