我有一个查询集合“ Case”,对于每个记录,我需要匹配另一个集合“ CustomerAgreement”。 所以我正在使用forEach并在其中调用第二个查询。问题是查询在forEach结束后运行。
让我们说有5个案例。
.inbtn{
height: 30px;
width: 30px;
display: inline-block;
border-radius: 50%;
font-size: large;
font-weight: 500;
margin-left: 25%;
margin-right:25%;
vertical-align: middle;
background-color: #d8d8d8 !important;
text-align: center;
-webkit-appearance: none;
}
我得到的结果是(假设有5个案例) X X X X X ž ÿ ÿ ÿ ÿ y
我想要的结果是 X ÿ X ÿ X ÿ X ÿ X ÿ z
答案 0 :(得分:0)
您可以在循环中使用 async 函数和 await 每个查询:
Case
.find({}, { case_id: 1 })
.then(async (recs) => {
for (const rec of recs) {
console.log("x");
const t = await CustomerAgreement
.findOne({ case_id: rec.case_id })
.exec();
console.log("y");
}
console.log("z");
});
我希望这会有所帮助。
答案 1 :(得分:0)
如果您可以使用异步/等待,则可以使用for of
循环
const recs = await Case.find({}, {case_id: 1});
for (const rec of recs) {
console.log("x");
const t = await CustomerAgreement.findOne({ case_id: rec.case_id }).exec();
console.log("y");
}
console.log("z");
如果没有,则可以使用async,这是一个允许您执行此类操作的库。
Case.find({}, { case_id: 1 }).then((recs) => {
async.each(recs, (rec, callback) => {
console.log("x");
CustomerAgreement.findOne({ case_id : rec.case_id }).then((t) => {
console.log("y");
callback();
});
}, (err) => {
if (err) {
console.log(err);
} else {
console.log('all records found successfully');
console.log("z");
}
});
});
PD:我没有测试上面的代码,但是从理论上讲应该可以。