Sats Js Async&人口密集

时间:2017-07-03 10:42:37

标签: javascript node.js sails.js

我正在尝试使用async.each来确保在返回响应之前我的深度填充完整。我遇到的问题是网站内的位置永远不会出现。我返回的只是第一个查询中的网站。虽然位置查询输出到控制台的结果很好。

总结一下,给出了用户的ID。然后,我返回与该用户关联的站点,然后填充该站点的位置。

getSitesForUser: function (req, res) {
    var _id = req.param('id');

    User.findOne({ id: _id })
        .populate('sites')
        .then(function afterFind(results) {
            if (!results) {
                return res.json({ status: 'failure', message: 'User not found' });
            }

            var sites = results.sites;

            async.each(sites, function (site, cb) {
                var locations = {};
                Locations.find({ id: site.id })
                    .then(function afterFind(locResults) {
                        //locResults outputs correctly
                        sails.log.debug(locResults);
                        site.locations = locResults;
                        cb();
                    })
                    .fail(function (err) {
                        sails.log.debug(err);
                        cb(err);
                    })
            }, function (err) {
                if (err) {
                    sails.log.debug(err);
                    return res.json({ status: 'failure', message: 'Server error' });
                } else {
                    return res.json({ status: 'success', message: 'Sites for found user', sites: sites });
                }
            });
        })
        .fail(function (err) {
            sails.log.debug(err);
            return res.json({ status: 'failure', message: 'Server error' });
        });
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据Sangharsh的建议,toJSON()解决了这个问题。

var resultsJSON = results.toJSON();
var sites = resultsJSON.sites;