rows.forEach(function(row){
console.log(row);
});
这里面的循环是异步的,所以出问题了,你要控制住异步。
给你一个例子,我刚学着写,应该写的不咋地,但是可以给你演示如何控制异步。
这里是引用的cc这个model里的,不写全了,大概看一下
getGrades: async () => {
return new Promise((resolve, reject) => {
db.pool.query('SELECT * FROM set_grades', function (err, rows) {
if(rows){
resolve(rows);
}
else{
console.log(err);
reject(err);
}
});
});
},
getTerms: async (grade_id) => {
return new Promise((resolve, reject) => {
db.pool.query('SELECT * FROM set_terms WHERE grade_id = ?', grade_id,function (err, rows) {
if(rows){
resolve(rows);
}
else{
console.log(err);
reject(err);
}
});
});
},
// ------------创建合同-------------
exports.createContract = async (ctx, next)=> {
// 1 获取types
let types = new Array();
await cc.getTypes().then(result => {
types = result;
});
// 2 获取cats
let cats = new Array();
await cc.getCats().then(result => {
cats = result;
});
// 3 获取grades
let grades = new Array();
await cc.getGrades().then(result => {
grades = result;
});
// 4 获取terms
// 遍历每一个grades,然后获取下面的terms,合并到grades
let forGrades = async function(grades) {
for(let grade of grades){
await cc.getTerms(grade.grade_id).then(result => {
grade.terms = result;
});
}
}
await forGrades(grades);
await ctx.render('cc/createContract',{
title: 'Create Contract',
student_id: ctx.params.id,
types: types,
cats: cats,
grades: grades
})
}