Я в экспресс-маршрутизаторе, рендеринг с Jade и вытаскивание данных из MongoDB для подготовки к этому. Есть ли лучший способ собрать все необходимые данные по сравнению со следующей конструкцией? Обратите внимание, что нет никакой зависимости между ресторанами столов, клиентами и драйверами, требующими первого возврата - мне просто нужно, чтобы все три выполнялись перед рендерингом страницы.Есть ли лучший метод вызовов функций зависимостей против их укладки?
Некоторые из этих каскадных вызовов в некоторых случаях становятся довольно глубокими. Должна быть лучшая конструкция, не так ли?
router.get('/iframe_map/:restaurantid/:customerid', function(req, res, next) {
Restaurant.findOne({'_id': req.params.restaurantid}, '-_id address name phone status lat lng LatLng marker', function(restaurantErr, restaurantDoc) {
Customer.findOne({'_id': req.params.customerid}, '-_id address name phone status lat lng LatLng marker', function(customerErr, customerDoc) {
Driver.find({}, '-_id letterOrdinal address firstName lastName phone status lat lng LatLng marker', {sort: {letterOrdinal: 1}}, function(driverErr, driverDocs) {
res.render('iframe_map', {
title: "Google Map",
defaultZoomLevel: 12,
defaultCityState: ", San Diego, CA",
oRestaurant: restaurantDoc,
oCustomer: customerDoc,
oDrivers: driverDocs
}); // End of res.render()
}); // End of Driver.find()
}); // End of Customer.find()
}); // End of Restaurant.find()
}); // End of router.get()
вы можете использовать Асинхронный Водопад https://github.com/caolan/async#waterfall –
@Michelem Хм ... * IF * мои функции БД имели зависимости между собой, тогда я бы согласился. (Неплохая попытка.) Поскольку мои функции БД не имеют зависимостей между собой, я думаю, что async.parallel может быть более уместным здесь. https://github.com/caolan/async#paralleltasks-callback (спасибо.) –
Да, конечно, Водопад - это всего лишь пример, модуль Async - это то, что вы должны попробовать (и если для вас это лучше использовать, то используйте его) –