在返回值之前等待异步“findOne”完成

本·马吉尔

我有一个名为 extrafunctions.js 的文件,它导出要由 app.js 运行的函数。这些函数之一包括 MongoDB 查询 findOne。问题是该函数在查询完成之前返回一个值,因此 app.js 没有获得所需的数据,而是“未定义”。

我在某种程度上尝试过 Promises,但没有任何效果。

应用程序.js:

const extraFunctions = require("./extraFunctions");
app.get('/api/login', (req, res) => {
    res.end(extraFunctions.login());
});

extraFunctions.js:

function login () 
{
client.connect(err => {
    var collection = client.db("site").collection("test");
    collection.findOne({}, (err, result) => {
        if (err) throw err;
        console.log(result);
        return result;

    });
    client.close();
}); 
}

module.exports.login = login;

固定版本与接受的评论相同,但必须更改res(result)res(JSON.stringify(result))

岗嘎达尔

你需要使用promiseor async-await,下面是一个promise实现的例子:

应用程序js

const extraFunctions = require("./extraFunctions");
app.get('/api/login', (req, res) => {
    extraFunctions.login().then(result =>{
        res.end(result);
    })
});

extraFunctions.js

function login() {
    return new Promise((res, rej) => {
        client.connect(err => {
            if(err){
                rej(err)
            }
            var collection = client.db("site").collection("test");
            collection.findOne({}, (err, result) => {
                if (err) rej(err);
                console.log(result);
                res(result)
            });
            client.close();
        });
    })
}

module.exports.login = login;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章