Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Async Wait mongoDb始终返回未定义的_Node.js_Mongodb_Express - Fatal编程技术网

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)
    }
}

非常感谢,我真的很感激,它现在正在工作!非常感谢,我真的很感激,它现在正在工作!非常感谢你善意的回答,很高兴能指望你的帮助!非常感谢你善意的回答,很高兴能指望你的帮助!非常感谢,沉默很好,能在这些问题上依靠你真是太好了!非常感谢,沉默很好,能在这些问题上依靠你真是太好了!