【发布时间】:2021-03-19 08:56:50
【问题描述】:
提前致谢,但有人可以向我解释如何为我的请求的每个属性执行不同的查询吗?我正在尝试创建一个搜索侧边栏菜单, 当用户更改复选框值时,我会创建一个具有以下属性的对象:
{
"category": [
"electronics",
"clothing",
"pets"
],
"condition": [
"old",
"new"
]
}
我想将查询推送到一组函数中,然后使用 async.parallel 执行它们。调用时,我想将每个查询的结果推送到一个包含所有查询结果的数组中。
router.get('', async function(req,res)
{
var searchResults = [];
if(req.query.filters)
{
const queryObj = JSON.parse(req.query.filters);
var searchQueries = [];
if(queryObj.category){
searchQueries.push(async function (cb) {
return await Rentals.find({/* SOME CONDITION */}).populate('-something').exec(function (err, docs) {
if (err) {
throw cb(err);
}
cb(null, docs);
});
})
}
if(queryObj.condition){
searchQueries.push(async function (cb) {
return await Rentals.find({/* SOME CONDITION */}).populate('-something').exec(function (err, docs) {
if (err) {
throw cb(err);
}
cb(null, docs);
});
})
}
async.parallel(searchQueries, function(err, foundRentals) {
if (err) {
throw err;
}
searchResults.push(foundRentals[0]); // result of searchQueries[0]
searchResults.push(foundRentals[1]); // result of searchQueries[1]
searchResults.push(foundRentals[2]); // result of searchQueries[2]
})
}
res.json(searchResults);
});
返回 searchResults 时出现问题,我从服务器接收到一个空数组,但是在发送响应后,查询完成,并且在发送响应后得到结果。 如何同时执行所有查询并等到所有查询完成后再向客户端发送响应?
【问题讨论】:
-
你试过
Promise.all()吗? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
是的,但我仍然不太了解如何使用正确的语法创建 Promise,我是异步编程的新手 :(
标签: javascript node.js mongodb express asynchronous