我使用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]
使用Async/Await
在你的情况下:
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)});
使用then()方法返回一个承诺
var promise1 = new Promise(function(resolve, reject) {
resolve('Success!');
});
promise1.then(function(value) {
console.log(value);
// expected output: "Success!"
});
使用then方法的MDN中的更多详细信息
你熟悉“承诺。你可以使用”。then(callback)“。它将等待直到执行异步函数。并且可以在回调函数中执行验证
User.findById(id)
.then(function(user) {
if (!user) {
return "here you return an error";
}
return "you return OK with payload from database";
})
.catch(next);