mongoose中数组循环查询find结果的同步实现

来源:互联网 发布:淘宝购物返利网高 编辑:程序博客网 时间:2024/06/05 19:58

在项目中,mongoose的find方法查询是异步查询的,所以得到的结果是异步的结果,看下面的例子。

根据试卷的id号查找对应试卷中的试题,找到试题id后找到试题信息。

加入试题数据库信息如下:

{    "_id" : ObjectId("59dc79ddcf9bb828c4689284"),    "quesType" : "1",    "quesStem" : "第1单选",    "quesAns" : "A",    "quesAla" : "第1单选",    "quesSel" : [         "第1单选",         "第1单选",         "第1单选",         "第1单选"    ]}

quesType是试题类型(单选/多选/判断),quesStem是试题题干,quesAns是试题答案,quesAla试题结果分析,quesSel试题选项。后台查询代码如下:

var length;//试题长度var quesList;//试题信息Exam.find({_id:id}).then((info){var idArr = info.split(',')idArr.forEach((id)=>{Ques.find({_id:id}).then((quesInfo)={quesList.push(quesInfo)})})})

理论上我们想要得到的结果就像是数据表中一一对应的结果,然后结果并非这样,因为find方法是异步的,查询结果是不确定的。

如何实现一一对应的结果呢,类似于同步方法呢?

方法是Promise.all方法。代码如下:

var length;//试题长度var quesList;//试题信息Exam.find({_id:id}).then((info){var idArr = info.split(',');length=idArr.length;var promises = idArr.map((id)=>{return Ques.find({//记得必须要return_id:id})})return Promise.all(promises)}).then((objList)=>{objList.forEach((info)=>{//获取试题信息:试题类型,试题题干,试题选项objInfo.push({quesType:info[0].quesType,quesStem:info[0].quesStem,quesSel:info[0].quesSel})//返回前台查询结果。判断添加是试题信息的长度等于之前获取试题id号的长度if(quesList.length==length){res.json({quesInfo:quesList})}})})

那么结果就是我们想要得到的结果。


阅读全文
1 0
原创粉丝点击