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

完善fetchAndDisplayUsers函数:API用户数据获取与展示实现

完善后的fetchAndDisplayUsers函数实现

我帮你调整了代码,完全贴合你提出的需求,同时修复了现有代码里的几个小问题(比如函数调用顺序、重复添加选项的问题),最终代码如下:

// 先声明全局users数组(确保后续操作有正确的数据源)
let users = [];

const displayUsers = (results) => {
  const selectItems = document.querySelector('.select-text');
  // 先清空现有选项,避免重复添加用户
  selectItems.innerHTML = '';
  results.forEach(element => {
    console.log(element);
    const options = document.createElement("option");
    options.textContent = element.name;
    options.value = element.id;
    selectItems.appendChild(options);
  });
};

const fetchAndDisplayUsers = () => {
  // 添加初始用户数据
  users.push({ age: 40, weight: 75, height: 6, country: 'Nigeria', name: 'Charles Odili', id: 'dfhb454768DghtF' });
  users.push({ age: 26, weight: 72, height: 6, country: 'Uganda', name: 'Peter Odili', id: 'gydf4' });
  // 首次展示初始用户列表
  displayUsers(users);

  // 声明API变量并赋值指定URL
  const api = 'https://randomapi.com/api/y1lfp11q?key=LEIX-GF3O-AG7I-6J84';
  
  // 发起fetch请求并处理流程
  fetch(api)
    // 将响应转为JSON格式
    .then(response => response.json())
    // 解构获取results,再提取第一个用户对象
    .then(({ results }) => {
      const [user] = results; // 解构数组直接拿到第一个用户
      users.push(user); // 将新用户添加到数组
      // 传入包含新用户的内联数组调用displayUsers
      displayUsers([...users]);
    })
    // 捕获并处理请求错误
    .catch(error => {
      console.error('获取用户数据失败:', error);
      // 可选:添加用户友好的错误提示,比如alert('加载用户数据失败,请稍后重试')
    });
};

关键修改说明:

  • 函数顺序调整:把displayUsers放在fetchAndDisplayUsers之前,避免出现调用未定义函数的错误
  • API变量配置:严格按照要求声明并赋值了指定的API地址
  • fetch流程优化:
    • 简化响应转JSON的写法,去掉冗余的return
    • 用双层解构直接拿到API返回的第一个用户对象
    • 按照要求将新用户加入数组,并通过[...users]创建内联数组传入展示函数
  • 错误处理:添加.catch捕获请求过程中的网络错误或解析错误,便于调试和问题排查
  • 重复渲染修复:在displayUsers里先清空下拉框的现有选项,避免每次调用都重复添加相同用户

这样修改后,代码就能完整实现从API获取用户、更新列表并展示的功能,同时保证了代码的健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:28:01