I have the below sequence of the chained loop which I want to return using promises but I get the response before the forEach is executed in my code... Can anyone tell me where I am going wrong... I would like to do it using native Promises and would not prefer to use await/async so I get a better understanding of how Promises function.
Details.find(function(err,details){
    if(err){
        res.send(err)
      }else{
          console.log("----------First Promise------------")
          return details
      }
}).then(result1 => {
    result1.forEach(function(item){
        renderData = {}
        OrgChart.findOne({GID:item.gid},function(err,detail){
                console.log("Detail is ------> " + detail.DISPLAY_NAME)
                if(err){
                    res.send(err)
                }else{
                    return detail.DISPLAY_NAME
                }
            }).then( result2 => {
                renderData.gid = result2.DISPLAY_NAME
                renderData.pageouttime = item.pageouttime
                renderData.createdAt = item.createdAt
                renderData.oncall = item.oncall
                renderData.comments = item.comments
                renderData.actionLink = item._id.toString()              
                console.log(renderData)
                dataArr.push(renderData)
            })      
    })
}).then(result3 => {
    console.log("Final Result is ----> " + result3)
    response.data = result3
    res.json(response) 
}) 
Inside the forEach, I want to get a value using a value of the row. I am new to node js and Promises... I want to achieve something like below but using Promises.
Example sequence I want to Achieve through Promises
var someArray = []
var DetailsObj = Details.find()
DetailsObj.each(function(item){
   var newMap = {}
   newMap.prop1=item.prop1
   newMap.prop2 = item.prop2
   newMap.prop3 = OrgChart.find({id:item.prop3}).displayName
   someArray.push(newMap)
})
Please, can anyone let me know where I am going wrong?
Update 1(Not Working)
return Promise.all(result1.map(function(item){
        renderData = {}
        OrgChart.findOne({GID:item.gid},function(err,detail){
                console.log("Detail is ------> " + detail.DISPLAY_NAME)
                if(err){
                    res.send(err)
                }else{
                    return detail.DISPLAY_NAME
                }
            }).then(result2 => {
                renderData.gid = result2.DISPLAY_NAME
                renderData.pageouttime = item.pageouttime
                renderData.createdAt = item.createdAt
                renderData.oncall = item.oncall
                renderData.comments = item.comments
                renderData.actionLink = item._id.toString()              
                console.log(renderData)
                dataArr.push(renderData)
            })      
    }))
Still i get an empty array
Update 2 (Added return from the map callback--- Still not Working)
return Promise.all(result1.map(function(item){
        renderData = {}
        OrgChart.findOne({GID:item.gid},function(err,detail){
                console.log("Detail is ------> " + detail.DISPLAY_NAME)
                if(err){
                    res.send(err)
                }else{
                    return detail.DISPLAY_NAME
                }
            }).then(result2 => {
                renderData.gid = result2.DISPLAY_NAME
                renderData.pageouttime = item.pageouttime
                renderData.createdAt = item.createdAt
                renderData.oncall = item.oncall
                renderData.comments = item.comments
                renderData.actionLink = item._id.toString()              
                console.log(renderData)
                dataArr.push(renderData)
            }) 
        return dataArr             
    })
)
Update 3(Updated after returning from the then() callback in the Promise.all() block --- Still not Working)
  return Promise.all(result1.map(function(item){
        renderData = {}
        OrgChart.findOne({GID:item.gid},function(err,detail){
                console.log("Detail is ------> " + detail.DISPLAY_NAME)
                if(err){
                    res.send(err)
                }else{
                    return detail.DISPLAY_NAME
                }
            }).exec().then(result2 => {
                renderData.gid = result2.DISPLAY_NAME
                renderData.pageouttime = item.pageouttime
                renderData.createdAt = item.createdAt
                renderData.oncall = item.oncall
                renderData.comments = item.comments
                renderData.actionLink = item._id.toString()              
                return renderData
            })            
    })
)
 
     
    