Search code examples
javascriptnode.jsarraysfetchconcatenation

Getting empty array


I have declared three arrays dronesList, ndzDrones, pilotsList. After all the conditions are executed, I am getting updated data of dronesList and ndzDrones but the pilotsList is empty, although I'm receiving the data and pilotsList is updated inside the condition after pushing but outside of condition getting Empty[] of pilotsList. Can't figure what I'm missing here. Any help will be appriciated

let dronesList = []
    let ndzDrones = []
    
    try {
        const xml = await fetch(
            "https://assignments.reaktor.com/birdnest/drones"
          ).then((res) => res.text())
          .catch((error) => {
            console.error('Error:', error)
          })
        const jsonData = parser.parse(xml)
        const dronesData = jsonData.report.capture.drone;
        dronesList = dronesData;

        if(dronesList !== ""){
            
            dronesList.map((drone) =>{
                const x = Number(drone.positionX)
                const y = Number(drone.positionY)
                if(checkVoilation(x, y)){
                    ndzDrones = ndzDrones.concat(drone)
                }
            })
        }

        let pilotsList = []
        if(ndzDrones !== ""){
            ndzDrones.forEach(async (drone) => {
                const serial = drone.serialNumber
                const response = await fetch(`https://assignments.reaktor.com/birdnest/pilots/${serial}`)
                const data = await response.json()
                pilotsList = pilotsList.concat(data)
            })
        }
        console.log(dronesList) //Output [drones]
        console.log(ndzDrones) //Output [ndzDrones]
        console.log(pilotsList) //Output [] Empty Array
        res.status(200).json(pilotsList)
    } catch (error) {
        res.status(404).json({message: error.message})
    }

Solution

  • const pilotsList = await Promise.all(ndzDrones.map(async (drone) => {
      const serial = drone.serialNumber
      const response = await fetch(`https://assignments.reaktor.com/birdnest/pilots/${serial}`)
      const data = await response.json()
      return data
    })).flat()