Vous mélangez promesses et rappels. exec() renverra une Promise, mais seulement si aucun argument ne lui est transmis. De plus, vous devez renvoyer la promesse renvoyée par exec() .
return budget.save().then((res) => {
return Budget.findById(res._id) // missing return here
.populate('User')
.populate('Vehicle')
.exec() // don't need anything else
})
Vous pouvez nettoyer un peu plus :
return budget.save()
.then(res => Budget.findById(res._id)
.populate('User')
.populate('Vehicle')
.exec())
Si vous avez besoin de transformer les résultats renvoyés par findById avant de les remettre au client :
return budget.save()
.then(res => Budget.findById(res._id)
.populate('User')
.populate('Vehicle')
.exec())
.then(res => {
res.foo = 'Foo'
return res
})