使用 原生的 for循环替代forEach循环即可解决问题
1.实例代码:
select_Father_comment_sql_res
.forEach( (item) => {
const Select_FId_children_sql = util.format(
"Select *, \
IFNULL(User.UserName,'') as CommentUserName, \
IFNULL(User.UserName,'') as AtUserName\
From Comment Left Join User ON\
Comment.CreateUserId=User.UserId Where FatherCommentId=%s",
item.CommentId
);
const Select_FId_children_sql_res = await query(Select_FId_children_sql);
console.log("3433333", Select_FId_children_sql_res);
if (Select_FId_children_sql_res[0]) {
Select_FId_children_sql_res.forEach((itemZi) => {
console.log("6666", itemZi);
CommentZiList.push(itemZi);
});
}
})
console.log("9999999999999999");
res.send({
status: 0,
CommentList: CommentFuList,
ZI: CommentZiList,
});
console.log("9999999999999999");
2.此处会发现双log打印会早于forEach中循环的 6666等打印,且前端接收到的ZI也是同为空数组,证明res.send还未等forEach完成,就已经被执行。
3.此时,换成for 循环 即可解决问题
for (let i = 0; i < select_Father_comment_sql_res.length; i++) {
const Select_FId_children_sql = util.format(
"Select *, \
IFNULL(User.UserName,'') as CommentUserName, \
IFNULL(User.UserName,'') as AtUserName\
From Comment Left Join User ON\
Comment.CreateUserId=User.UserId Where FatherCommentId=%s",
select_Father_comment_sql_res[i].CommentId
);
const Select_FId_children_sql_res = await query(Select_FId_children_sql);
console.log("3433333", Select_FId_children_sql_res);
if (Select_FId_children_sql_res[0]) {
Select_FId_children_sql_res.forEach((itemZi) => {
console.log("6666", itemZi);
CommentZiList.push(itemZi);
});
}
}
console.log("9999999999999999");
res.send({
status: 0,
CommentList: CommentFuList,
ZI: CommentZiList,
});
console.log("9999999999999999");