没有得到回应

时间:2019-07-18 13:57:26

标签: node.js

即使存在数据也要获取空数组。

作为响应的空数组,请帮助我。

sql.query("SELECT id, latitude, longitude from businesses", (err, data) => {
    if (err) {
      result(err, null)
    } else {

      // result(null, data)
      let distanceArray = []
      let c = 0;
      var disDataOf = [];
      _.map(data, (d) => {
        c++;
        // console.log("c-------------", c)
        let distanceData =  getDistanceFromLatLonInKm(d.latitude, d.longitude, lat, long);
        // console.log("disatace--------", distanceData, range)
        if (distanceData < range || distanceData == range) {

          Business.getBusinessListingById(d.id, (err, finalBusinessData) => {
            if (err) {
              result(err, null)
            } else {
                disData = finalBusinessData[0]
                console.log("dis--------", disData)
                disData.distance = distanceData
                distanceArray.push(disData)
                console.log("array====================", distanceArray)
              // console.log("c-------------", c)
              // if (c == data.length-1) {
              //   result(null, distanceArray)
              // }
            }
          })
        }

      },
      result(null, distanceArray)
      )
      // result(null, distanceArray)


    }
  })

没有错误,只有空数组

1 个答案:

答案 0 :(得分:0)

这是您的代码在运行_.map并遇到getBusinessListingById异步方法但在实际完成异步请求之前返回结果的常绿问题。

您需要将内部部分设为Promise,并将其压入数组并使用Promise.all执行。最佳情况下,您应该使用async-await

sql.query("SELECT id, latitude, longitude from businesses", (err, data) => {
  if (err) {
    result(err, null)
  } else {
    // result(null, data)
    let distanceArray = []
    var disDataOf = [];
    const promises = [];
    _.forEach(data, (d) => {
      // console.log("c-------------", c)
      let distanceData = getDistanceFromLatLonInKm(d.latitude, d.longitude, lat, long);
      // console.log("disatace--------", distanceData, range)
      if (distanceData < range || distanceData == range) {
        promises.push(Business.getBusinessListingById(d.id));
      }
    })
    Promise.all(promises)
      .then((arr) => {
        result(null, arr);
      })
      .catch((err) => {
        result(err)
      })
    // result(null, distanceArray)
  }
})

请参阅我最近写的this blog post只是因为这类问题的频率。