Il y a 2 choses qui, lorsqu'elles sont utilisées en combinaison, rendront le code beaucoup plus agréable :
Collection.find
renvoie une Promise .- Pour attendre qu'une promesse soit résolue en Javascript moderne, utilisez
await
Vous pouvez utiliser le code suivant :
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, pour récupérer les résultats en parallèle plutôt qu'en série, utilisez 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
}
});
Vous pouvez utiliser le même type de modèle chaque fois que vous avez plusieurs appels asynchrones à effectuer - pas besoin d'imbrication et d'indentation de crochets laids.