Await 似乎不起作用,Async (nodejs)



因此,我试图创建一个函数来检查用户是否存在于数据库中,如果用户不存在,则会将其导入数据库。我正在尝试使用等待功能,这样它就可以在继续之前等待功能完成

const doesUserExist = (id) => {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db('db');
var users = dbo.collection('user');
return new Promise(function(resolve, reject) {
users.findOne({'id': id}, function (err, user) {
if (err) throw err;
console.log('User: ', user);
if (user === null) {
resolve(false);
} else {
resolve(true);
}
});
});
});
}
const userLogin = async (user) => { // User login function
var id = String(user.id);
// Check if the user exists
var doesExist = await doesUserExist(id);
console.log(doesExist);
if(doesExist===undefined){
console.log('ERROR: Exist is empty');
return;
}
if(doesExist===false){
console.log(`User with the id ${id} does not exist.`);
addUser(user);
} else {
console.log(`User with the id ${id} does exist.`);
}
}

您不会从doesUserExist函数返回Promise。

您只是在MongoClientconnect函数的回调中返回一个Promise。

你必须以这种方式重构你的代码:

const doesUserExist = (steamid) => {
return new Promise(function(resolve, reject) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db('treehouse');
var users = dbo.collection('users');
users.findOne({'steamid': steamid}, function (err, user) {
if (err) throw err;
console.log('User: ', user);
if (user === null) {
resolve(false);
} else {
resolve(true);
}
});
});
});
}

现在,doesUserExist函数返回一个Promise,该Promise在findOne回调中解析。

最新更新