这是我的异步功能
async duplicate_email(db, email) {
await db.collection("users").findOne({ 'email': email }, function(findErr, result) {
console.log(findErr)
if (!result) {
return false
} else {
return true
}
});
}
我从另一个文件中这样称呼它:
middleware.duplicate_email(db, "admin@admin.com").then((answer) => {
console.log(answer)
});
答案总是返回未定义的,而结果是填充的。
答案 0 :(得分:0)
您应该通过将mongo调用设置为变量来利用async / await promise语法。像这样:
async duplicate_email(db, email) {
let myResults;
try {
myResults = await db.collection("users").findOne({ 'email': email });
} catch (err) {
console.log(err);
}
return myResults ? true : false;
}
然后您可以使用duplicate_email
返回的承诺
middleware.duplicate_email(db, "admin@admin.com").then((answer) => {
console.log(answer)
});
那是使用异步/等待的美丽。您不再需要回调。但是,要捕获错误,您将需要try
catch
块。
答案 1 :(得分:0)
async duplicate_email(db, email) {
let availableEmail = await db.collection("users").findOne({ 'email': email })
if (!availableEmail) {
return false
} else {
return true
}
});
}
如果您使用的是异步功能,请不要使用回调。
答案 2 :(得分:0)
这是一个简短的解决方案
只需返回结果并将其反转两次即可。您将得到true
或false
async duplicate_email(db, email) {
try {
return !!(await db.collection("users").findOne({ 'email': email }))
}catch(err) {
console.log(err)
}
}