首页 > 解决方案 > 如何从异步函数中获取数据并在获取数据后允许下一个代码执行

问题描述

我使用 mongoose find() 从 mongodb 获取一些数据并对该数据执行一些验证,但问题是此函数是异步的,它不会等待数据完成并执行下一个代码。并且当执行下一个代码时,它可以执行,因为它有空数据。然后我在异步函数中编写了我的验证逻辑,这样当数据可用时,它才会移动到下一个代码,但在每次返回时它都会发送未定义的数据。

function isValidObject(obj) {

     schemaData.find({}, (error, data) => { // calls data from db

      var contactSchema = data; // this is data i need

    if(//validation fails){
      return "wrong data";// every time it returns undrfined on every 
                          // condition
     }

     });                         
 }

var validationResp = isValidObject(obj);
console.log(validationResp); // output is undefined

我还使用“await”来等待数据,但在这种情况下,它会在每个 return 语句中返回 [object promise]

标签: javascriptmongoose

解决方案


使用异步/等待

在你的情况下:

async function isValidObject(obj) {
  let data = await schemaData.find({}); // wait until it resolve promise 
  //do your validaion    
  return data;                  
}

isValidObject(obj).then((validationResp)=>{console.log(validationResp)});

推荐阅读