Има 2 неща, които, когато се използват в комбинация, ще направят кода много по-хубав:
Collection.find
връща Обещание .- За да изчакате Promise да се разреши в съвременния Javascript, използвайте
await
Можете да използвате следния код:
const Person= require('./models/person')
const Mortician = require('./models/mortician')
router.get('/', async (req, res, next) => {
try {
const persons = await Person.find({ pickedUp: false });
const morticians = await Mortician.find({});
res.render('pages/dashboard', {
title: 'Dashboard',
persons,
morticians,
});
} catch(e) {
// handle errors
}
});
Или, за да извлечете резултатите паралелно, а не последователно, използвайте Promise.all
:
router.get('/', async (req, res, next) => {
try {
const [persons, morticians] = await Promise.all([
Person.find({ pickedUp: false }),
Mortician.find({})
]);
res.render('pages/dashboard', {
title: 'Dashboard',
persons,
morticians,
});
} catch(e) {
// handle errors
}
});
Можете да използвате един и същ вид шаблон винаги, когато имате няколко асинхронни извиквания за извършване - няма нужда от грозно влагане в скоби и отстъпи.