Det finns två saker som, när de används i kombination, kommer att göra koden mycket snyggare:
Collection.find
returnerar ett löfte .- För att vänta på att ett löfte ska lösas i modernt Javascript, använd
await
Du kan använda följande kod:
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
}
});
Eller, för att hämta resultaten parallellt snarare än i seriell, använd 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
}
});
Du kan använda samma sorts mönster när du har flera asynkrona anrop att göra - inget behov av fula fäste och indrag.