【发布时间】:2023-03-17 01:01:01
【问题描述】:
有来自家庭树的家庭成员存储在数据库中。该函数(如下)应该查询用户的所有亲属,并将他们的联系人和元数据添加到列表中,以作为唯一条目与每个人一起返回(顺序无关紧要)。
问题是这个函数只返回一个家庭度数。亲子关系较低的每个人都被省略了。
async function getFamilyMembers(memberId) {
let relativesList = [];
let relativesdescendantsList = [];
//local database
//returns [] if nothing is found
//returns an array of objects if finds anything
//items returned contain .id
let relatives = await realmInstance
.objects("FamilyMember")
.filtered(`member.id="${memberId}"`);
if (relatives) {
relatives.forEach(async (relative) => {
//external function to add relative metadata
//like name, family branch, etc
//it keeps the relative.id for use below
let relativeData = fillData(relative);
relativesList.push(JSON.stringify(relativeData));
let newList = await getFamilyMembers(relative.id);
relativesdescendantsList = [...newList, ...relativesList];
});
return relativesList.concat(relativesdescendantsList);
} else {
return relatives;
}
}
我认为问题与递归的工作方式有关。在最低的分支上,当然孩子们没有孩子,所以他们返回一个空数组
//relative.id is the id of the kid
let newList = await getFamilyMembers(relative.id);
所以,newList 是一个空数组,但 relativeData 不应该为空,但在控制台上我也将它作为一个空数组,即使我(相信)我正在推动孩子元数据进入数组。
【问题讨论】:
-
为什么使用
await getFamilyMembers?此方法中没有 API 调用。看起来你不应该在这里使用递归,因为你正在使用 API 调用。相反,只需在用户单击树中的项目时进行 API 调用。 -
@StepUp
await realmInstance的行为类似于 API 调用,因为查询本地磁盘需要时间。
标签: javascript arrays node.js recursion tree