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

使用Fetch获取JSON数据存入变量后返回undefined的解决方法

问题分析

你这段代码存在两个关键问题:

  1. fetchCities函数无返回值:内部then回调中的return data仅作用于该回调函数,并未作为fetchCities的返回值,因此调用fetchCities()会得到undefined。
  2. 未正确处理异步操作:Fetch API是异步执行的,无法通过同步赋值的方式直接获取异步操作的结果。
修复方案

方案1:返回Promise并通过then链式调用处理

修改fetchCities,让它返回整个Fetch的Promise链,之后在then回调中获取数据:

const fetchCities = () => {
  return fetch('cities.json')
    .then(response => response.json())
    .then(data => data);
}

fetchCities().then(cities => {
  console.log(cities);
  // 在此处进行后续数据操作,如存入变量、渲染页面等
});

方案2:使用async/await语法(更简洁直观)

通过async标记函数,await等待异步操作完成,让异步代码看起来像同步代码:

const fetchCities = async () => {
  const response = await fetch('cities.json');
  const data = await response.json();
  return data;
}

// await只能在async函数内使用,因此用立即执行的async函数包裹调用逻辑
(async () => {
  const cities = await fetchCities();
  console.log(cities);
  // 后续业务逻辑写在这里
})();
注意事项
  • 异步操作的结果仅能在异步上下文(then回调或await之后的代码)中访问,同步代码无法直接获取。
  • 检查cities.json的文件路径是否正确,若路径错误或文件不存在,会导致请求失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:31:14