【发布时间】:2020-05-03 07:37:24
【问题描述】:
我在await里面使用await,首先我在'a'行中使用了await,它工作正常,进入里面继续从'b'行到'd'行执行,但之后它需要进入那个查询并且必须从'e'行执行到'f'行,然后它必须最终执行'g'和'h'行并返回结果但问题是'd'行之后它不会在代码内部执行而是它来到'g'行并执行进一步的代码,然后返回到'e'行,这会导致错误。请帮帮我。
var writeStreamData = '';
var surveyBlockId = req.body.surveyBlockId;
var title = req.body.title;
a. await SurveyAnswer.find({'blockId': surveyBlockId}, (err, doc) => {
b. if(doc.length!=0){
userName = '';
userIdList = Object.values(doc.reduce((acc,cur)=>Object.assign(acc,{[cur.userId.toString()]:cur}),{}));
const pdfDoc = new PDFDocument({margin: 50});
writeStreamData = pdfDoc.pipe(fs.createWriteStream('pdf_files/SurveyAnsweredUserList.pdf'));
pdfDoc.fontSize(25).text('Home Owners Association', {align: "center"});
pdfDoc.lineCap('butt').moveTo(30,80).lineTo(600,80).stroke();
pdfDoc.moveDown();
pdfDoc.fontSize(20).text('Survey Title : '+title);
pdfDoc.moveDown();
pdfDoc.fontSize(20).text('List of Users');
if(doc.userIdList!=0){
var counter = 0;
c. userIdList.forEach(async element => {
userId = element.userId.toString();
d. await User.findOne({'_id':userId},async(err1, doc1) => {
e. if(!err1){
counter++;
userName = doc1.firstname + " "+ doc1.lastname;
pdfDoc.fontSize(15).text((counter)+". "+userName).moveDown();
}else{
counter++;
//return eachCb(err1)
}
//eachCb();
})
}, function(err, data) {
if(err){
response = {
"message": "failed"
}
res.send(response);
}
});
}else{
pdfDoc.fontSize(15).text('No User answered');
}
f. pdfDoc.end();
}else{
response = {
"message": "failed"
}
res.send(response);
}
});
g. fs.readFile(writeStreamData.path, function(err, data) {
h. if(err) throw err;
const pdf = data.toString('base64');
response = {
"message": "success",
"data": pdf
}
res.send(response);
})
});```
【问题讨论】:
标签: javascript node.js mongodb foreach async-await