javascript - 如何从异步函数中获取数据并在获取数据后允许下一个代码执行
问题描述
我使用 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 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)});
推荐阅读
- c# - 如何调用 LUIS 并在 FormFlow 之外获取其意图
- amazon-web-services - aws cloudformation 中的映射。Fn::FindInMap 对象需要三个参数
- c++ - 从析构函数访问模板类构造函数的参数,可以吗?
- html - Bootstrap CSS:带图像的 div 与文本重叠 div
- php - Yii2 Mandrill 邮箱软验证
- java - 在 Java 中初始化泛型类型堆栈的不兼容类型
- java - 如何在 Selenium 中访问表单类型的登录/注册弹出窗口
- concatenation - 使用 rake 合并文件
- batch-file - 如何在批处理脚本中存储带变量的函数?
- java - 代码气味 sonarLint - 为静态字段分配值