如何处理返回承诺的异步功能?

时间:2020-07-03 21:10:45

标签: node.js mongodb

我想从MongoDB获得一个用户。所以我应该使用异步功能来获得正确的结果。但是它返回了我[对象,承诺]。如何使用这些数据?

async function getUsers() {
    var allUsers = null;
    await MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db('mydb');
        dbo.collection("users").find({})
            .toArray(function(err, results) {
                if (err)
                    throw error;
                db.close();
                allUsers = results;
            });
    });
}


app.get('/user/', function(req, res) {
    MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db('mydb');
        var id = req.params.id;
                    var allUsers = getUsers();
             res.render('pages/user', {users: allUsers });
            db.close();
        });
});

1 个答案:

答案 0 :(得分:2)

您正在混合promise和简单的回调。您需要选择一个并持续使用它。这是使用promises进行编码的方法-使用MongoDb如果正确使用就可以返回的promises:

main

我从路由处理程序中删除了数据库操作,因为它们实际上没有做任何事情,并且数据库内容已经在async function getUsers() { const db = await MongoClient.connect(url); try { const dbo = db.db('mydb'); const results = await dbo.collection("users").find({}); return results; } finally { db.close(); } } app.get('/user/', function(req, res) { getUsers().then(allUsers => { res.render('pages/user', {users: allUsers }); }).catch(err => { console.log(err); // send some sort of error response here res.sendStatus(500); }); }); 内部。