Você está misturando Promises e callbacks.
exec()
retornará uma Promise, mas somente se não tiver nenhum argumento passado para ela. Além disso, você precisa retornar a Promise retornada por exec()
. return budget.save().then((res) => {
return Budget.findById(res._id) // missing return here
.populate('User')
.populate('Vehicle')
.exec() // don't need anything else
})
Você pode limpar isso um pouco mais:
return budget.save()
.then(res => Budget.findById(res._id)
.populate('User')
.populate('Vehicle')
.exec())
Se você precisar transformar os resultados retornados por
findById
antes de entregá-los ao cliente:return budget.save()
.then(res => Budget.findById(res._id)
.populate('User')
.populate('Vehicle')
.exec())
.then(res => {
res.foo = 'Foo'
return res
})