簡體   English   中英

貓鼬查詢時的Javascript變量范圍

[英]Javascript variable scope when mongoose query

我正在使用node.js,貓鼬和foursquare API。

            foursquare.getVenues(params, function(err, venues) {
            if(err) return res.json(JSON.stringify({status: 'error', returnData: err}));

            // variable initialization
            var rooms = [];
            var vanueItem;

            // iterate foursquare return list (venue item)
            venues.response.venues.forEach(function(item) { 
                Room.aggregate(
                    [
                    { "$group": { 
                            "_id": '$mobileUser.genderType', 
                            "genderTypeCount": { "$sum": 1 }
                        }}
                    ],
                    function(err,result) {
                    if(err) return res.json(JSON.stringify({status: 'error', returnData: err}));

                    // build it to return after
                    vanueItem = 
                        {
                            id: item.id,
                            name: item.name,
                            description: item.description,
                            contact: item.contact.formattedPhone,
                            lat: item.location.lat,
                            lng: item.location.lng,
                            distance: item.location.distance,
                            city: item.location.city
                        };  

                        // insert it into venue array
                        rooms.push(vanueItem);  
                     }
                );
            });

            return res.json(JSON.stringify({ status: 'success', returnData: rooms }));
        });

我的房間陣列有問題。 當我刪除“ Room.aggregate”查詢時,工作正常(所有房間都可以),但是當我使用聚合時,返回函數給我空房間。

我已經嘗試從“ var rooms = [];”中刪除var

Room.aggregate是異步函數,如果要迭代異步函數,則可以使用異步庫,如下所示

var async = require('async');

foursquare.getVenues(params, function(err, venues) {

    if (err) return res.json(JSON.stringify({
        status: 'error',
        returnData: err
    }));

    var rooms = [];
    var vanueItem;

    async.each(venues.response.venues, function (item, next) {
        Room.aggregate(
            [{
                "$group": {
                    "_id": '$mobileUser.genderType',
                    "genderTypeCount": {
                        "$sum": 1
                    }
                }
            }],
            function(err, result) {
                if (err) {
                    return next(err);
                }

                // build it to return after
                vanueItem = {
                    id: item.id,
                    name: item.name,
                    description: item.description,
                    contact: item.contact.formattedPhone,
                    lat: item.location.lat,
                    lng: item.location.lng,
                    distance: item.location.distance,
                    city: item.location.city
                };

                rooms.push(vanueItem);

                next(null);
            }
        );

    }, function (err) {
        if (err) {
            return res.json(JSON.stringify({
                status: 'error',
                returnData: err
            }));
        }          

        return res.json(JSON.stringify({
            status: 'success',
            returnData: rooms
        }));
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM