@japan123

Как отложить выполнение до выполнения условия?

На endpoint "/search" приходят разнообразные данные от фильтров. В объект query я включаю пришедшие данные, массив reserveNomersIds наполняется, если пришли данные по датам . Каким образом отсрочить выполнение Nomer.find(query) пока не заполнится reserveNomerIds, то бишь не проверится условие if (req.body.from && req.body.to) ?
app.post('/api/search', function(req, res) {
        var query = {}
        var reserveNomersIds;
        var filter = {}

        //price
        if (req.body.min && req.body.max) {      
            query.cost_per_night = {$gte: req.body.min, $lte: req.body.max}
            //по возрастанию
            filter.cost_per_night = 1
        }
        //dates
        if (req.body.from && req.body.to) {
            Reservation.distinct("nomer", {from: {$lt: new Date(req.body.to)}, to: {$gt: new Date(req.body.from)} }
            ).then((data, err) => {
                reserveNomersIds = data;
            })
        }
        if (req.body.guests > 1) {
            query.occupancy = {$gte: req.body.guests}
        }
        if (req.body.search) {
            query.city = { $regex: req.body.search.toLowerCase() }
        }
        Nomer
            .find({ _id: { $nin: reserveNomersIds}, query})
            .sort(filter)
            .then(function (err, result) {
                if(err){
                    res.send(err);
                } else {
                    res.json(result);
                }
            })
    })
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
А в современный Javascript нельзя?
app.post('/api/search', async function(req, res) {
	var query = {}
	var reserveNomersIds;
	var filter = {}

	//price
	if (req.body.min && req.body.max) {
		query.cost_per_night = {$gte: req.body.min, $lte: req.body.max}
		//по возрастанию
		filter.cost_per_night = 1
	}
	//dates
	if (req.body.from && req.body.to) {
		reserveNomersIds = await Reservation.distinct("nomer", {
			from: {
				$lt: new Date(req.body.to)},
				to: {$gt: new Date(req.body.from)
			}
		});
	}
	if (req.body.guests > 1) {
		query.occupancy = {$gte: req.body.guests}
	}
	if (req.body.search) {
		query.city = { $regex: req.body.search.toLowerCase() }
	}
	try {
		var result = await Nomer
			.find({ _id: { $nin: reserveNomersIds}, query})
			.sort(filter);

		res.json(result);
	} catch (e) {
		res.send(e);
	}
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы