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

React Native访问Google Directions嵌套数组内transit_details触发类型错误

解决Google Directions API访问transit_details时的TypeError问题

这问题我之前也碰到过——大概率是不是所有steps都包含transit_details对象,或者你在层级访问时某个环节的数组/对象是undefined,导致直接访问属性触发了报错。毕竟Google Directions的响应里,只有公交、地铁这类公共交通的step才会带transit_details,步行、驾车的step根本没这个字段。

给你几个实用的解决思路和代码示例:

1. 安全访问嵌套属性,避免踩undefined的坑

可以用ES6的可选链操作符(?.)快速做安全访问,或者用传统的条件判断逐层校验:

可选链写法(简洁高效)

// 假设directionsResponse是你拿到的JSON响应对象
directionsResponse.routes.forEach(route => {
  route.legs?.forEach(leg => {
    leg.steps?.forEach(step => {
      // 先判断transit_details是否存在,再操作
      const transitInfo = step.transit_details;
      if (transitInfo) {
        console.log('线路名称:', transitInfo.line.name);
        console.log('出发站点:', transitInfo.departure_stop.name);
      } else {
        console.log('当前step非公共交通环节,无transit_details');
      }
    });
  });
});

传统条件判断(兼容旧环境)

directionsResponse.routes.forEach(route => {
  // 先校验legs数组存在且非空
  if (route.legs && route.legs.length > 0) {
    route.legs.forEach(leg => {
      // 校验steps数组存在且非空
      if (leg.steps && leg.steps.length > 0) {
        leg.steps.forEach(step => {
          // 最后校验transit_details是否存在
          if (step.transit_details) {
            console.log('线路名称:', step.transit_details.line.name);
          }
        });
      }
    });
  }
});

2. 处理未捕获的Promise拒绝

既然是Promise相关的错误,一定要给你的请求Promise加上.catch()块,把错误接住处理,别让它在控制台飘红:

// 假设你用fetch发起API请求
fetch('你的Google Directions API请求地址')
  .then(res => res.json())
  .then(data => {
    // 这里放上面的遍历处理逻辑
  })
  .catch(err => {
    console.error('请求或数据处理出错:', err);
    // 这里可以加错误提示、重试逻辑之类的
  });

3. 先确认响应结构没问题

你可以先把完整的JSON响应打印出来,看看legs和steps数组是不是真的有数据,以及哪些step带transit_details——有时候可能因为路线规划的特殊情况,返回的legs是空数组,这时候直接访问leg.steps也会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:20