帆船&异步每个不分配值

时间:2017-07-04 08:24:03

标签: javascript json node.js sails.js

我正在使用异步来迭代对象并执行查询来填充他们的孩子。每个站点的位置都有具有区域的楼层。我的网站和位置填充得很好,但是,这就是停止的地方。虽然它们正在寻找地板和区域,但它们从未被分配。有什么想法吗?

gg: function (req, res) {
    var userID = req.param('id');

    User.findOne({ id: userID }).populate('sites').exec(function afterFind(err, foundUser) {
        if (err) return res.json({ status: 'failure', message: 'Server error' });
        if (foundUser === undefined) return res.json({ status: 'failure', message: 'User was not found' });

        var resultToJson = foundUser.toJSON();
        var sites = resultToJson.sites;

        async.each(sites, function (site, siteCb) {
            sails.log.debug('Finding locations for ' + site.name);
            Locations.find({ site: site.id }).exec(function afterFind(err, foundLocations) {
                if (err) {
                    siteCb(err);
                } else {
                    site['locations'] = foundLocations;

                    async.each(site['locations'], function (location, locCb) {
                        sails.log.debug('Finding floors for ' + location.name);
                        Floor.find({ location: location.id }).exec(function afterFind(err, foundFloors) {
                            if (err) {
                                locCb(err);
                            } else {
                                location['floors'] = foundFloors;

                                async.each(location['floors'], function (floor, floorCb) {
                                    sails.log.debug('Finding areas for ' + floor.name);
                                    Area.find({ floor: floor.id }).exec(function afterFind(err, foundAreas) {
                                        if (err) {
                                            floorCb(err);
                                        } else {
                                            floor['areas'] = foundAreas;
                                            floorCb();
                                        }
                                    });
                                }, function (floorError) {
                                    if (floorError) {
                                        locCb(floorError);
                                    }
                                    else {
                                        locCb();
                                    }
                                });
                            }
                        });
                    }, function (locError) {
                        if (locError) {
                            siteCb(locError);
                        } else {
                            siteCb();
                        }
                    });
                }
            });
        }, function (siteError) {
            if (siteError) {
                sails.log.debug(siteError);
                return res.json({ status: 'failure', message: 'Server error' });
            } else {
                return res.json({ status: 'success', message: 'Sites for user retrieved', sites: sites });
            }
        });
    });
}

1 个答案:

答案 0 :(得分:0)

应使用foundLocations上的toJSON()修复此代码。任何时候当你使用填充的(或其他东西)覆盖已定义的属性时,在使用ORM返回的对象时,使用toJSON()或其他东西并分配给普通的JS对象时,它将无效。

参考:https://stackoverflow.com/a/43500017/1435132

此外,有什么理由不将populateLocations.find一起使用?