Заранее спасибо, но кто-нибудь может мне объяснить, как я могу выполнить разные запросы для каждого свойства моего запроса?Я пытаюсь создать меню боковой панели поиска, когда пользователь изменяет значения флажков, я создаю объект со следующими свойствами:
{
"category": [
"electronics",
"clothing",
"pets"
],
"condition": [
"old",
"new"
]
}
Я хочу вставить запрос в массив функций, а затем выполнить их с помощью асинхронного.Параллельно При вызове я хочу отправить результат каждого запроса в один массив, содержащий результат всех запросов.
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, однако я получаю пустой массив с сервера, однако послеответ был отправлен, запросы завершены, и я получаю результат ПОСЛЕ ответа был отправлен.Как я могу выполнить все запросы одновременно и подождать, пока все они не завершатся, прежде чем отправлять ответ клиенту?