You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中访问异步函数返回对象的属性问题

问题描述

我尝试从Google Geocoding API获取坐标(纬度和经度),但不知道如何访问返回对象中的属性。以下是我的代码:

const geoCoor = async function () { 
  const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${address}&key=${API_KEY}`; 
  const response = await request.get(url); 
  return response 
};
(async function(){ 
  let data = await geoCoor(); 
  console.log(data.results[0]); 
})();

我已经尝试用立即执行函数表达式(IIFE)包裹代码,但在尝试访问数组时,仍然收到“undefined”错误提示。


解决方案

我来帮你排查下问题,主要有两个核心点需要修正:

  • 解析JSON字符串:request.get()默认返回的是原始的JSON格式字符串,不是可以直接访问属性的JavaScript对象。你必须先把它解析成对象,才能读取results这类嵌套属性。
  • 添加安全校验:API请求可能因为地址无效、密钥错误等原因失败,直接访问data.results[0]很容易触发报错,最好先检查请求状态和数据结构。

修改后的代码如下:

const geoCoor = async function () { 
  // 用encodeURIComponent处理地址,避免特殊字符破坏URL格式
  const encodedAddress = encodeURIComponent(address);
  const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodedAddress}&key=${API_KEY}`; 
  
  const response = await request.get(url); 
  // 把字符串解析为JS对象
  const parsedData = JSON.parse(response);
  
  // 先校验API请求是否成功
  if (parsedData.status !== 'OK') {
    throw new Error(`地理编码失败:${parsedData.status}`);
  }
  
  return parsedData;
};

(async function(){ 
  try {
    let data = await geoCoor(); 
    // 现在可以正常读取坐标了
    const location = data.results[0].geometry.location;
    console.log(`纬度:${location.lat},经度:${location.lng}`);
  } catch (err) {
    // 捕获并处理所有可能的错误
    console.error('出错了:', err.message);
  }
})();

另外补充两个实用细节:

  • encodeURIComponent()能处理地址里的空格、特殊字符,避免URL格式错误导致请求失败。
  • 用try/catch包裹异步逻辑,能捕获请求失败、解析错误等各种异常,让代码更健壮。

内容的提问来源于stack exchange,提问作者Bmurphy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 03:37:48