【问题标题】:Can't push array in function [duplicate]无法在函数中推送数组[重复]
【发布时间】:2018-11-09 08:23:47
【问题描述】:

我知道以前有人问过这个问题,但我似乎找不到答案,我的数组无法推送到 datahasil,如何将数组 hasil 推送到 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)
  })
});

【问题讨论】:

  • 建议:考虑不要循环查询数据库。
  • 没有返回值
  • forEach + async 实际上从来都不是一个好的组合
  • 使用调试器...

标签: javascript node.js express mongoose


【解决方案1】:

您为 forEach 函数提供了一个异步方法,移除了它的同步特性,因此,改为在结果数组上使用 map 和 await Promise.all:

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);
});

【讨论】:

  • 而不是pushing 到外部数组,最好只使用Promise.all 的结果(少一个变量,更纯粹)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 2015-11-17
  • 2020-04-18
  • 2019-06-03
  • 2018-11-21
  • 2020-12-18
相关资源
最近更新 更多