首页 > 解决方案 > 在 node.js 中使用 geo.find() 时没有及时得到响应

问题描述

我试图从下面的代码中得到响应:-

  let latlongdata;
  if (userInfo.address != "" && userInfo.country != "") {
    let add = userInfo.address + "," + userInfo.country;
    geo.find(add, function(err, res) {
      latlongdata = res[0].location.lat;
      console.log("Inside output", res[0].location.lat); // Got response
    });
    console.log("Outside output", getletlong); // No response
  }
}

在安慰“内部输出”时我得到了回应,在安慰“外部输出”时我没有得到回应

我也尝试使用异步等待,下面是代码:-

if (userInfo.address != "" && userInfo.country != "") {
  add = userInfo.address + "," + userInfo.country;
  [err, data] = await to(geo.find(add));

  console.log("output", data);
  console.log("error", err);
} 

最后我在使用 setTimeOut() 时得到了响应

let latlongdata;
if (userInfo.address != "" && userInfo.country != "") {
  add = userInfo.address + "," + userInfo.country;
  geo.find(add, function(err, res) {
    if (res) {
      userInfo.latitude = res[0].location.lat;
    }
  });
}
userInfo.role_id = 2;
setTimeout(async () => {
  [err, user] = await to(User.create(userInfo));
}, 300);

但是我认为这不是正确的方法,而且我认为这在每种情况下都不适用于我,请谁能告诉我在前两种方法中我做错了什么。

我用过:-“google-geocoder”:“^0.2.1”

标签: node.jsgeolocationgoogle-geolocation

解决方案


我做了一些研发并找到了以下解决方案

let add = userInfo.address + "," + userInfo.country;
return new Promise((resolve, reject) => {
  geo.find(
    "India",
    (err, res) => {
      if (res) {
        resolve(res);
      }
      if (err) {
        reject(err);
      }
    },
    err => {
      reject(err);
    }
  );
});

推荐阅读