Node.js Async Wait mongoDb始终返回未定义的
这是我的异步函数Node.js Async Wait mongoDb始终返回未定义的,node.js,mongodb,express,Node.js,Mongodb,Express,这是我的异步函数 async duplicate_email(db, email) { await db.collection("users").findOne({ 'email': email }, function(findErr, result) { console.log(findErr) if (!result) { return false
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)
});
在填充结果时,answer始终返回未定义的值。您应该通过将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;
}
然后,您可以使用replicate\u电子邮件返回的承诺
middleware.duplicate_email(db, "admin@admin.com").then((answer) => {
console.log(answer)
});
这就是使用async/await的美妙之处。您不再需要回调。但是,对于错误捕获,您需要使用try
catch
块。您应该通过将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;
}
async duplicate_email(db, email) {
let availableEmail = await db.collection("users").findOne({ 'email': email })
if (!availableEmail) {
return false
} else {
return true
}
});
}
然后,您可以使用replicate\u电子邮件返回的承诺
middleware.duplicate_email(db, "admin@admin.com").then((answer) => {
console.log(answer)
});
这就是使用async/await的美妙之处。您不再需要回调。但是,对于错误捕获,需要使用try
catch
块
async duplicate_email(db, email) {
let availableEmail = await db.collection("users").findOne({ 'email': email })
if (!availableEmail) {
return false
} else {
return true
}
});
}
如果您使用的是异步函数,则不要使用回调函数
如果您使用的是异步函数,则不要使用回调。这里有一个简短的解决方案
只需返回结果并反转两次即可。您将获得true
或false
async duplicate_email(db, email) {
try {
return !!(await db.collection("users").findOne({ 'email': email }))
}catch(err) {
console.log(err)
}
}
这里有一个简短的解决方案
只需返回结果并反转两次即可。您将获得true
或false
async duplicate_email(db, email) {
try {
return !!(await db.collection("users").findOne({ 'email': email }))
}catch(err) {
console.log(err)
}
}
非常感谢,我真的很感激,它现在正在工作!非常感谢,我真的很感激,它现在正在工作!非常感谢你善意的回答,很高兴能指望你的帮助!非常感谢你善意的回答,很高兴能指望你的帮助!非常感谢,沉默很好,能在这些问题上依靠你真是太好了!非常感谢,沉默很好,能在这些问题上依靠你真是太好了!