Existem 2 coisas que, quando usadas em combinação, tornarão o código muito mais agradável:
Collection.find
retorna uma Promessa .- Para esperar que uma Promise seja resolvida em Javascript moderno, use
await
Você pode usar o seguinte código:
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
}
});
Ou, para recuperar os resultados em paralelo em vez de serial, use
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
}
});
Você pode usar o mesmo tipo de padrão sempre que tiver várias chamadas assíncronas para fazer - não há necessidade de aninhamento e recuo de colchetes feios.