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
相关产品推荐
相关产品推荐

