我试图获得所有功能的结果' 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]);
});
答案 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);
});