首页 > 解决方案 > Loop Childens 自定义 Mongodb

问题描述

User.find({ refUser: req.params.userName }).then(function (users) {
        var network_users = [];
        network_users.push(users);


            users.forEach(function (u) {
                network_users.push(User.find({ refUser: u.toObject().userName }));
            })

        return Promise.all(network_users);

我有 4 个用户,我希望收到一个包含所有孩子的 json,但我只收到了第一个和这个第一个的孩子。

有人可以帮我解决这个循环吗?请!非常感谢!!!!

标签: javascriptjsonnode.jsmongodbasynchronous

解决方案


    function asyncLoop(iterations, func, callback, foo) {
        var done = false;
        var loop = {
            next: function () {
                if (done) {
                    return;
                }

                if (iterations) {
                    func(loop);

                } else {
                    done = true;
                    if (callback) callback(foo);
                }
            },

            isEnd: function () {
                return done;
            },

            refresh: function (it) {
                iterations = it;
            },

            break: function () {
                done = true;
                callback();
            }
        };
        loop.next();
        return loop;
    }


function bfs(userName, callback) {
    userName = String(userName);
    var q = [], res = [];

    User.findOne({ "refUser" : userName }).lean().exec(function (err, root) {
        root.depth = 0;
        q.push(root);

        asyncLoop(q.length, function (loop) {
            res.push(q[0]);
            User.find({ "refUser" : q[0].userName }).lean().exec(function (err, new_nodes) {
                if (err) console.log(err);
                else {
                    var d = q[0].depth;
                    q.shift();
                    loop.refresh(new_nodes.length + q.length);
                    if (new_nodes.length > 0) {
                        new_nodes.forEach(function (new_node) {
                            new_node.depth = d + 1;
                            q.push(new_node);
                        });
                    }
                    loop.next();
                }
            });

        }, function () { callback(res) });
    });
}

精加工:

 bfs(req.params.userName,function(callback){
                res.send(callback)
            })

推荐阅读