等待似乎不起作用,异步(nodejs)
Posted
技术标签:
【中文标题】等待似乎不起作用,异步(nodejs)【英文标题】:Await doesn't seem to work, Async (nodejs) 【发布时间】:2019-01-03 03:37:25 【问题描述】:所以我正在尝试创建一个函数来检查用户是否存在于数据库中,如果不存在则将其导入数据库。我正在尝试使用 await 功能,以便在继续之前等待功能完成。
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.`);
【问题讨论】:
【参考方案1】:您没有从 doesUserExist
函数返回 Promise。
您只是在 MongoClient connect
函数的回调中返回一个 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
函数正在返回一个在 findOne
回调中解析的 Promise。
【讨论】:
以上是关于等待似乎不起作用,异步(nodejs)的主要内容,如果未能解决你的问题,请参考以下文章