Node.js 函数中的返回值
我有以下功能:Node.js 函数中的返回值,node.js,mongodb,asynchronous,Node.js,Mongodb,Asynchronous,我有以下功能: const findUserByEmail = (email) => { var user MongoClient.connect(url, (err, db) => { const dbo = db.db('users') dbo.collection('users').findOne({email: email}, (err, result) => { if (err) throw err else retur
const findUserByEmail = (email) => {
var user
MongoClient.connect(url, (err, db) => {
const dbo = db.db('users')
dbo.collection('users').findOne({email: email}, (err, result) => {
if (err) throw err
else return result
})
db.close()
}).then((user) => {
return user
})
}
我正在尝试返回user的值,以便findUserByEmail(email)
=user,但不知道如何返回。我曾尝试使用async/await,并承诺返回此值以绕过节点的异步性质,但在每种情况下,我都无法获得返回到主函数的值。在本例中,return user将用户返回到then()函数,这是不正确的
任何帮助都将不胜感激。您的关系非常密切,但您的功能
FindUserByMail
缺少一点,它需要返回一个承诺。使用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 function test() {
try {
const user = await findUserByEmail("email.com");
// do something
} catch (error) {
// do something
}
}
使用async/await
findUserByEmail("email.com").then(user => {
// do something
}).catch(err => {
// do something
})
async function test() {
try {
const user = await findUserByEmail("email.com");
// do something
} catch (error) {
// do something
}
}
非常接近,但函数findUserByEmail
缺少一点,它需要返回一个承诺。使用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 function test() {
try {
const user = await findUserByEmail("email.com");
// do something
} catch (error) {
// do something
}
}
使用async/await
findUserByEmail("email.com").then(user => {
// do something
}).catch(err => {
// do something
})
async function test() {
try {
const user = await findUserByEmail("email.com");
// do something
} catch (error) {
// do something
}
}