Вы очень близки, но есть одна вещь, которую вы упускаете из-за вашей функции findUserByEmail
, она должна вернуть Promise
. С Promise
вы можете позвонить resolve
в будущем с результатом findOne
. Это также изменит то, как вы используете функцию findUserByEmail
.
Пример
const findUserByEmail = (email) => {
return new Promise((resolve, reject) => {
MongoClient.connect(url, (mongoError, db) => {
if (mongoError) {
return reject(mongoError)
}
const dbo = db.db('users')
dbo.collection('users').findOne({ email: email }, (findError, user) => {
if (findError) {
return reject(findError)
}
db.close();
return resolve(user)
})
})
})
}
Чтобы использовать эту функцию, вы можете использовать Promise.then(user => )
или предпочтительный подход async/await
.
Использование с использованием .then()
findUserByEmail("email.com").then(user => {
// do something
}).catch(err => {
// do something
})
Использование с использованием async/await
async function test() {
try {
const user = await findUserByEmail("email.com");
// do something
} catch (error) {
// do something
}
}