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

如何将Fetch API返回的数组存入全局变量?

问题解决:Fetch响应数据无法存入全局变量

你的代码逻辑本身没问题,但问题出在异步操作的执行顺序上:

  • fetch是异步网络请求,不会阻塞后续代码执行
  • .then()里的赋值操作要等请求成功返回后才会触发
  • 如果在请求完成前就访问data变量,它自然还是初始的undefined

解决方案1:在.then()回调内处理数据

所有依赖data的逻辑都要放在回调里,确保数据已经获取完成:

function getvals(){
  return fetch('https://jsonplaceholder.typicode.com/posts')
  .then((response) => response.json())
}

getvals().then(response => {
  const data = response;
  // 所有需要用到data的代码都写在这里
  console.log(data); // 这里能正常拿到完整数组
});

解决方案2:用async/await简化异步逻辑

async/await让异步代码看起来更像同步代码,可读性更强:

async function fetchPosts() {
  // 等待请求完成
  const response = await fetch('https://jsonplaceholder.typicode.com/posts');
  // 等待响应转为json
  const data = await response.json();
  
  // 直接在这里处理数据
  console.log(data);
  return data;
}

// 如果需要全局变量存储:
let data;
fetchPosts().then(result => {
  data = result;
  // 同样,依赖data的逻辑要在这里执行
});

避坑提醒

不要在异步操作完成前访问data,比如下面的写法肯定会得到undefined:

let data;
getvals().then(response => {
  data=response;
})
console.log(data); // 这行代码会先执行,此时请求还没结束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:30:49