partner.findAll
является асинхронным. Когда ваш код проходит цикл и инициализирует обещания, запросы только что были отправлены; .then
s разрешает только после завершившего их потока, поэтому partnerList
не заполняется до вас return partnerList
. Вместо этого используйте Promise.all
над всеми findAll
с:
member.findAll({
where:{
isPartner:1
}
}).then(async (partnerList) => {
await Promise.all(partnerList.map(({ dataValues: { no } }) => (
partner.findAll({
include: [{
model: member,
required: true,
}],
where:{
partner_no : no
}
}).then(myCustomers => {
partnerList[i].dataValues.myCustomers = myCustomers.length;
}))));
return partnerList;
}).then(partnerList => {
res.render('partner/partners', {partnerList: partnerList})
})
Но с async
/ await
будет легче читать без .then
s:
const partnerList = await member.findAll({
where:{
isPartner:1
}
});
await Promise.all(partnerList.map(async ({ dataValues: { no } }) => {
const myCustomers = await partner.findAll({
include: [{
model: member,
required: true,
}],
where:{
partner_no : partner_no
}
});
partner.dataValues.myCustomers = myCustomers.length;
}));
res.render('partner/partners', {partnerList: partnerList});