如何实现嵌套注释的递归逻辑?

时间:2018-05-03 00:56:32

标签: javascript node.js recursion sequelize.js

我有一个续集模型 comment ,它与自己有一个belongsTo关系,用于表示父评论,如果有的话,如下:

var answer = confirm("Yes or no?")

我试图通过简单的RESTful API获取属于特定文章ID的所有评论:

models.comment.belongsTo(models.comment, {
    as: 'parent',
    foreignKey: 'parentId'
});

Sequelize中的getChildren()实例方法通过查找父级是该注释的任何其他注释(即回复)来返回任何注释的直接子级。 适用于第一层回复,例如:

router.get('/article/:id/comments', (req, res, next) => {
    models.comment.findAll({
        where: {
            articleId: req.params.id,
            parentId: null
        }
    }).then(roots => {
        // iterate thru each root asynchronously and get its children
        async.each(roots, (root, callback) => {
            root.getChildren().then(children => {
                // set the object's children to this result
                root.children = children;
                callback();
            });
        }, (err) => {
            if(!err) {
                return res.status(200).json(roots);
            }else {
                return res.status(400).json({error: err});
            }
        });
    }).catch(err => {
        return res.status(400).json({error: err});
    });
});

但是,如果我添加更多深度,它就不会。方法如下:

- Parent 1
    - Child 1
    - Child 2
        - Child 3 << This one isn't included
            - Child 4 << Obviously, this one neither
- Parent 2
    - Child 5
    - Child 6

如何实现递归逻辑,以便getChildren()调用自身在嵌套注释中获取N层深度,并返回一个完整结构化的JSON数据树以用于前端?我没有很好地研究递归,当你必须在nodejs中异步完成所有事情时,我遇到了问题。

我不是在寻找MySQL解决方案。

谢谢。

0 个答案:

没有答案