Обратные вызовы упрощают:
после каждого вызова метода я использую обратные вызовы, которые иногда могут быть утомительными, но они более читабельны
после каждого методаотфильтрованные данные передаются, пусть они будут данные
Product.find({_id: id},(err,data)=>{
if(err)throw err;
else{
data.select('name',(err,newData)=>{
if(err)throw err;
var name= newData[0].name;
//your product will be the final filtered data
//you got the idea further you can proceed
}
)
}
})
Я считаю, что это проще и удобнее в обслуживании по сравнению с обещаниями, exec, async await. Просто помните, что каждый метод будет фильтровать данные, поэтому вызывайте данные данные конкретными методами.Надеюсь, что вы получили, это займет много времени, чтобы написать ответ, особенно если вы новичок здесь, пожалуйста, попытайтесь понять, что я пишу спасибо