Tento atualizar o valor dos membros do grupo para cada grupo e, depois disso, quero retornar novos grupos atualizados. Faço isso adicionando cada grupo ao array de resultados que declarei antes.
mas eu sempre obtive o resultado vazio na matriz de resultados. Alguém sabe como posso fazer a execução sequencialmente, não vou retornar o comando primeiro
Este é o meu código:
searchGroups: async (groupIdsList, accountId) => {
var result = [];
return Group.find({
_id: { $in: groupIdsList },
accountId: mongoose.Types.ObjectId(accountId),
}).then((groupList) => {
groupList.forEach(function (group) {
groupService
.getMembersUserDetails(
group.members,
mongoose.Types.ObjectId(accountId)
)
.then((members) => {
group.members = members;
result.push(group);
});
});
return result;
});
};
Já que você está usando async
, você pode aproveitar await
e simplificar o código assim.
Observe também que forEach não oferece suporte a promessas, então você precisa usar um for..of
ou Promise.all
com .map
se pudesse fazer as coisas em paralelo.
Algo assim.
searchGroups: async (groupIdsList, accountId) => {
const groupList = await Group.find({"_id": {"$in": groupIdsList}, "accountId": mongoose.Types.ObjectId(accountId)});
return Promise.all(groupList.map(async group => {
group.members = await groupService.getMembersUserDetails(group.members, mongoose.Types.ObjectId(accountId));
return group;
}));
};
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras