Sails 和 Async 各自不赋值

Sails & Async Each Not Assigning Values

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

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 });
            }
        });
    });
}

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

参考:

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