使用Node.js MongoDB驱动程序使用MongoDB和express.js开发应用程序(使用此驱动程序而不是Mongoose
来提高性能)。我想使用异步函数作为管理异步代码的更优雅的解决方案。
我知道如果我们在Mongo.client.connect(url)
上没有回调,我们会回复这样的承诺:
app.get('/', (req, res ,next) => {
let db = MongoClient.connect('mongodb://localhost:27017/playground');
db
.then(() => console.log('success'))
.catch(() => console.log('failure'));
next();
});
当我们添加async关键字并执行insert函数时,我们现在有了这个:
app.get('/', async (req, res ,next) => {
try{
var db = await MongoClient.connect('mongodb://localhost:27017/playground');
let myobj = { name: "Company Inc", address: "Park Lane 38" };
await db.db("mydb").collection("customers").insertOne(myobj);
}catch(err){
console.log(err);
}finally{
db.close();
}
next();
});
如果promise
块中的任何try
被拒绝,catch
块中的代码是否会被执行?
答案 0 :(得分:4)
当没有回调时,MongoDB驱动程序的每个数据库操作方法(例如findOne,InsertMany,createCollection)都会返回一个promise吗?
是。可以在所有这些方法的documentation中找到此行为。
如果在try块中拒绝任何promise,是否会执行catch块中的代码?
仅当被拒绝的承诺在await
块中try
时才会被添加。