Я написал следующую функцию для перестройки JSON объекта, который включает рекурсивно. Но при выполнении ничего не возвращается при выполнении и console.log
снова и снова регистрирует один и тот же компонент без завершения. Может ли кто-нибудь помочь мне определить проблему?
this.findOne = (id) => {
return new Promise(resolve => {
componentCollection.find(id).then(components => {
if (components[0]) {
let subComponents = components[0].components;
for (let i = 0; i < subComponents.length; i++) {
console.log(subComponents[i])
subComponents[i] = resolve(this.findOne(subComponents[i].id))
}
components[0].components = subComponents;
}
resolve(components[0])
})
})
}
РЕДАКТИРОВАТЬ: Компоненты включают только содержит идентификатор в качестве атрибута. Вот почему я должен построить это рекурсивно, как это. Я попробовал это по-другому, и он закончился тем же бесконечным журналом:
this.findOne = async (id) => {
let components = await componentCollection.find(id)
if (components[0]) {
let subComponents = components[0].components;
for (let i = 0; i < subComponents.length; i++) {
console.log(subComponents[i])
subComponents[i] = await this.findOne(subComponents[i].id)
}
components[0].components = subComponents;
}
return components[0]
}
Обе попытки снова и снова регистрируют первого потомка родительского компонента.
объект, который я пытаюсь построить:
{
id:1,
name:"comp1",
components:[
{
id:2,
name:"comp2",
components:[
{
id:3,
name:"comp3"
},
{
id:4,
name:"comp4"
}
]
}
]
}
Бесконечный журнал консоли от console.log(subComponents[i])
:
{
id:2,
name:"comp2",components:[..]
}
РЕДАКТИРОВАНИЕ:
Окружающий код findOne:
this.findone = () =>{}
module.exports = {
findOne: this.findOne
};
Я называю это в контроллере как:
const ComponentService = require('./cs');
const component = await ComponentService.findOne(id)//id={1,2,...}