組み合わせて使用すると、コードがはるかに優れたものになる2つのことがあります。
-
Collection.find
Promiseを返します 。 - 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
}
});
複数の非同期呼び出しを行う場合はいつでも同じ種類のパターンを使用できます。醜いブラケットのネストやインデントは必要ありません。