使用 原生的 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");