正在对Google Maps API进行地理编码的坐标返回待处理的承诺

问题描述 投票:-1回答:2

我正在尝试使用gooogle Maps Geocoding API和fetch返回给定地址的坐标。我可以将这些坐标记录在我的函数中,但是我不知道如何从函数中返回它们以在代码的其他地方使用它。已经尝试了两种方法的多种变体:

function getCoordinates1(name) {
  locObj =  fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=${name}&key=mykey`).then( (res) => res.json()).then( (data) => 
  { 
    console.log(data.results[0].geometry.location);
    return data.results[0].geometry.location;
  }).then((res) => res);
  }

let coordinates1 = getCoordinates1(latinaze(name2));
console.log(coordinates1);


async function getCoordinates2(name) {
  locObj =  await fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=${name}&key=mykeyk`).then( (res) => res.json()).then( (data) => 
  { 
    console.log(data.results[0].geometry.location);
    //return data.results[0].geometry.location;
  }).then((res) => res);
  return locObj
  }

let coordinates2 = await getCoordinates2(latinaze(name2));
console.log(coordinates2);

第一个函数返回未定义,第二个函数返回未处理的承诺。我在做什么错?

node.js google-geocoding-api
2个回答
0
投票

第一个函数返回undefined,因为您什么都不返回。就这么简单;)


第二个函数返回一个未决的诺言,因为您不必等待诺言得到解决。当调用then内部的回调时,promise就会解决,但是发生这种情况after您在locObj中返回了getCoordinates2


您应该尝试此:

// function definition
async function getCoordinates3(name) {
  const resp = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=${name}&key=mykeyk`)
  const data = await resp.json();
  return data.results[0].geometry.location;
}

// usage
const coordinates3 = await getCoordinates3(latinaze(name3));

0
投票

我无法从函数返回任何值,因此我将其设为类方法并在函数主体中设置属性。现在,在调用函数后,我可以获取该属性的值形式:

export default class SearchModel {   
  constructor() {
     this.start = ''; 
     this.meta = '';
     this.coors = [];
     this.address = 'none';
   }

   //translate coordinates to address   
   async getAdress(coordinates) {
     try {
       let geocodeCoordinates = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${this.coors[0]},${this.coors[1]}&key=${process.env.API_GM_KEY}`
       const rawData = await fetch(geocodeCoordinates);
       //console.log(await rawData.json());
       return await rawData.json();
     } catch (error) {
       return new Error(`Wild ERROR occured, can't get LocObj. Details: ${error}`);
     }   }

   async displayAdress(coordinates) {
     const data = await this.getAdress(coordinates);
     const dataAdress = await data.results[0].formatted_address;
     this.address = await dataAdress;   }

 }
© www.soinside.com 2019 - 2024. All rights reserved.