-1

I know this has been asked before but I can't seem to find the answer, my array can't push to datahasil, how to push array hasil to datahasil...??

const data1 = await JadwalBooking.aggregate([{
    $project: {
      "keterangan": "$keterangan",
      "jumlah_tersisa": "$datalayout.jumlah_kursi_tersisa",
      "flag": "$flag",
      "date1": "$datamisa.date",
    }
  },
  {
    $match: {
      flag: 1
    },
  },

], function(err, result) {
  var datahasil = []
  result.forEach(async(item) => {
    const hasil = await DetailBookingMisa.find({
      $or: [{
          flag: 3
        },
        {
          flag: 4
        }
      ],

      $and: [{
        jadwalbookingmisa: item._id
      }]
    }, )
    datahasil.push(hasil)
  })
});

enter image description here

Ayush Gupta
  • 8,716
  • 8
  • 59
  • 92
Ahmad Sayadi
  • 143
  • 1
  • 2
  • 11

1 Answers1

0

You gave forEach function an asynchronous method removing its synchronous nature so instead, use map and await Promise.all on the resulting array:

const data1 = await JadwalBooking.aggregate([{
    $project: {
      "keterangan": "$keterangan",
      "jumlah_tersisa": "$datalayout.jumlah_kursi_tersisa",
      "flag": "$flag",
      "date1": "$datamisa.date",
    }
  },
  {
    $match: {
      flag: 1
    },
  },

], async function(err, result) {
  const datahasil = await Promise.all(result.map(async(item) => {
    const hasil = await DetailBookingMisa.find({
      $or: [{
          flag: 3
        },
        {
          flag: 4
        }
      ],

      $and: [{
        jadwalbookingmisa: item._id
      }]
    })
    return hasil;
  });
  console.log(datahasil);
});
dotconnor
  • 1,736
  • 11
  • 22