我是Javascript的新手,我正在努力绕过Javascript中的异步函数和承诺。我正在使用猫鼬并试图发送一个结果对象。这就是我到目前为止所做的:
x = [12, 37, 64, 159, 205, 225, 239, 252, 257]
a = [(12,37),(37,64),(64,159),(159,205),(205,225),(225,239),(239,252),(252,257)]
以下是我不明白的事情:
我希望能够从聚合函数中的项目中分配属性,然后将新结果作为响应发送。这样做的最佳方式是什么?
答案 0 :(得分:0)
我通过将整个函数拆分为多个异步函数来重新编写整个函数。这将在执行下一行之前等待查询完成。
idiomController.search = async(req, res, next) => {
var results = await findIdiom(req.query.keyword);
var temp = [];
for(var i = 0; i < results.length; i++) {
var agg = await aggregateResults(results[i]);
temp.push({
rating: agg[0].rating,
total: agg[0].total
});
}
//handle response
}
aggregateResults = (result) => {
return Rating.aggregate(
[
{
"$match": {
"idiomid": { "$eq": result._id }
}
},
{
$group: {
_id: {idiomid: "$idiomid", type: "$type"},
rating: { $sum: "$rating"},
total: { $sum: 1}
}
}
]
);
}
findIdiom = (keyword) => {
return Idiom.find({keywords: keyword});
}