Node.js 被悬而未决的承诺所困扰

Node.js 被悬而未决的承诺所困扰,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,使用NodeJS和Mongoose,我试图创建一个数据库文件,允许我查询数据库并返回结果,以便在不使用Mongoose的情况下使用 在我的数据库文件中,我有这个 db.js 在我的另一个文件中,我称之为 var db = require('./db') var user_info = db.getUser("tom"); console.log(user_info); 当调用getUser函数时,它会正确地打印我在db.js文件中查找的信息,代码如下 console.log(user);

使用NodeJS和Mongoose,我试图创建一个数据库文件,允许我查询数据库并返回结果,以便在不使用Mongoose的情况下使用

在我的数据库文件中,我有这个

db.js

在我的另一个文件中,我称之为

var db = require('./db')

var user_info = db.getUser("tom");
console.log(user_info);
当调用getUser函数时,它会正确地打印我在db.js文件中查找的信息,代码如下

console.log(user);
然而,我似乎找不到让数据库将值返回到用户信息的方法,我只是得到

Promise { <pending> }
Promise{}
我已经调查过了。然后又打了电话,但似乎不知道如何让它发挥作用。我总是在一个无休止的等待承诺的循环中结束


谢谢

您必须致电
。然后
承诺获取结果:

检查这里

您必须致电
。然后
承诺获取结果:

检查这里

您需要调用
。然后为getUser调用

// db.js
module.exports = {
    getUser: function (name) {
        return User.findOne({
            username: name
        }).exec();
    }
};


var db = require('./db');
db.getUser("tom").then((user) => {
    console.log(user);
}).catch((err) => {
    console.log(err);
});

您需要为getUser调用
。然后调用

// db.js
module.exports = {
    getUser: function (name) {
        return User.findOne({
            username: name
        }).exec();
    }
};


var db = require('./db');
db.getUser("tom").then((user) => {
    console.log(user);
}).catch((err) => {
    console.log(err);
});
承诺会兑现。但是,您可以在
之后访问上的结果。然后


承诺会兑现。但是,在一次
之后,您可以访问上的结果。然后

您得到了您想要的吗?您使用的是哪个节点版本?您是否获得了所需的?您使用的是哪个节点版本?非常感谢,如果用户中有一个名为username的字段,是否有办法从user_info中获取该字符串并将其分配给其他内容,例如
var username=user_info。然后(user=>{return user.username;})?是的。你完全可以做到。但是像这样:
user\u info.then(user=>{var username=user.username;console.log(username);})
No我的意思是如果你想在
user\u info.then()函数之外使用用户名,那么在
user\u info.then()函数之前使用用户名
然后在
用户信息之后。然后()。JS是异步的,因此,您需要知道
db.getUser
操作何时完成。只有这样你才能使用结果。因此,
。然后,
就像是一个可以确保
用户
变量可用的地方。您可能还想查看
等待异步
,但我强烈建议您在去那里之前彻底了解承诺。非常感谢,如果用户中有一个名为username的字段,是否有一种方法可以从user_info中获取该字符串并将其分配给其他内容,例如
var username=user_info.then(user=>{return user.username;})?是的。你完全可以做到。但是像这样:
user\u info.then(user=>{var username=user.username;console.log(username);})
No我的意思是如果你想在
user\u info.then()函数之外使用用户名,那么在
user\u info.then()函数之前使用用户名
然后在
用户信息之后。然后()。JS是异步的,因此,您需要知道
db.getUser
操作何时完成。只有这样你才能使用结果。因此,
。然后,
就像一个可以确保
用户
变量可用的地方。您可能还想查看
等待异步
,但我强烈建议您在去那里之前彻底了解承诺。
var db = require('./db')

var user_info = db.getUser("tom");
console.log(user_info);

user_info.then(user => {
    const username = user.username;
    console.log(username);
});