【发布时间】:2018-02-01 07:55:10
【问题描述】:
我希望在 FOR 循环之后执行 IF 语句,一旦 FOR 循环内的 mongoose find 查询运行。由于nodejs是异步的,我遇到了问题。任何人都可以使以下代码同步,以便在将流程移动到 IF 语句之前执行包括猫鼬查询的 FOR 循环
app.post('/success', function (req, res) {
var seatLength = req.body.seatNo;
var ageList = req.body.age;
var nameList = req.body.name;
var emailData = req.body.email;
var dataG = req.body.dateOfJourney;
var emailArray = [];
var bookedAlready = false;
var bookedSeats = [];
for (var i = 0; i < req.body.seatNo.length; i++) {
var pname = req.body.name[i];
var page = req.body.age[i]
busModel.findOne({$and: [{"ticket.seatNumber": req.body.seatNo[i]}, {"dateOfJourney": dataG}, {"ticket.reserved": false}]}, function (err, doc) {
if (doc) {
doc.ticket[0].reserved = true;
doc.ticket[0].passengerName = pname;
doc.ticket[0].passengerAge = page;
doc.ticket[0].passengerEmail = req.body.email;
doc.ticket[0].passengerContact = req.body.contact;
doc.save(function (err) {
if (err) {
console.log('error');
}
else {
console.log("no error");
console.log(req.body.seatNo[i]);
bookedSeats.push(req.body.seatNo[i]);
}
})
}
else {
console.log('error');
}
});
}
if (bookedSeats.length == seatLength.length) {
emailArray.push(i);
ejs.renderFile(__dirname + "/views/test.ejs", {
seat: seatLength,
name: nameList,
age: ageList
}, function (err, data) {
if (err) {
console.log(err);
}
else {
let HelperOptions = {
from: 'padinkit@gmail.com',
to: emailData,
subject: 'Hello World !',
html: data
};
transporter.sendMail(HelperOptions, function (error, info) {
if (error) {
console.log(error);
}
//console.log('mail sent');
console.log(info);
});
}
});
res.send("hi")
}
if (bookedSeats.length != seatLength.length) {
for (i = 0; i < bookedSeats.length; i++) {
busModel.findOne({$and: [{"ticket.seatNumber": req.body.seatNo[i]}, {"dateOfJourney": dataG}, {"ticket.reserved": true}]}, function (err, doc) {
if (doc) {
doc.ticket[0].reserved = false;
doc.ticket[0].passengerName = null;
doc.ticket[0].passengerAge = null;
doc.ticket[0].passengerEmail = null;
doc.ticket[0].passengerContact = null;
doc.save(function (err) {
if (err) {
console.log('error');
}
else {
console.log("seats which were reserved during exception" + req.body.seatNo[i]);
}
})
}
else {
console.log('error');
}
});
}
}
});
【问题讨论】:
-
很好,这意味着 javascript 工作正常。