异步并行问题

时间:2015-07-15 22:04:40

标签: mongodb asynchronous mongoose

我试图获得所有功能的结果' getSlotCount'使用Async - 每个getSlotCount都正确地使用Schema的.find()返回一个JSON对象,但由于异步行为,只有在我需要使用结果之后才会返回。

我尝试了几种不同的方式,但没有效果。我做错了什么?

async.parallel({
            small: function(callback){
                var small = getSlotCount('1-50');
                callback(null, small);
            },
            medium: function(callback){
                var medium = getSlotCount('200');
                callback(null, medium);
            },
            large: function(callback){
                var large = getSlotCount('1000');
                callback(null, large);
            }
        },
        function(err, results) {
            var availability = {
                'large': results.large,
                'medium': results.medium,
                'small': results.small
            };
            console.log(availability);
            res.json([availability]);
        });

1 个答案:

答案 0 :(得分:1)

.find()功能没有"返回"一个JSON对象,它将它传递给回调:

Model.find({_id: "1234"}, function(err, result) {
    // here is your result
}

VS

var result = Model.find({_id: "1234"});
// result is a query object, not the response from that query

同样,这些是基于不了解getSlotCount()的假设,但如果它实际上是异步的,那么您的代码看起来应该更像:

async.parallel({
            small: function(callback){
                getSlotCount('1-50', callback);
            },
            medium: function(callback){
                getSlotCount('200', callback);
            },
            large: function(callback){
                getSlotCount('1000', callback);
            }
        },
        function(err, results) {
            var availability = {
                'large': results.large,
                'medium': results.medium,
                'small': results.small
            };
            console.log(availability);
        });