Mongodb异步等待快递

时间:2018-02-13 21:36:18

标签: javascript node.js mongodb express async-await

使用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块中的代码是否会被执行?

1 个答案:

答案 0 :(得分:4)

  

当没有回调时,MongoDB驱动程序的每个数据库操作方法(例如findOne,InsertMany,createCollection)都会返回一个promise吗?

是。可以在所有这些方法的documentation中找到此行为。

  

如果在try块中拒绝任何promise,是否会执行catch块中的代码?

仅当被拒绝的承诺在await块中try时才会被添加。