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

如何在外部JS文件中获取getRooms函数返回的API数据?

如何正确调用异步的getRooms函数并获取返回结果?

嘿,我帮你找出几个导致代码失效的问题,以及对应的修复方案:

问题1:没搞懂异步操作的特性

$.ajax 是异步请求,它返回的不是你想要的房间数组,而是一个Promise对象。你直接用getRooms()[0]去取第一个元素,相当于在Promise对象上硬捞索引0,肯定拿不到实际数据。

问题2:拼写小错误

你在getRooms里写的是api.room.url,但你的房间类是api.rooms,这里少了个s,会导致请求地址错误,根本发不出正确的请求。

问题3:Promise回调没返回处理后的数据

你的then回调里执行了data.rooms.map(item => item.name),但没把这个处理后的数组return出去,所以Promise最终不会把房间名称数组传递给后续的调用。


修正后的api.js代码

var api = class {
  static get baseUrl() {
    return "http://127.0.0.1:8080/api/";
  }
  static get timeout() {
    return 60 * 1000;
  }
}

api.rooms = class {
  static get url() {
    return api.baseUrl + "rooms/";
  }
  static getRooms() {
    return $.ajax({
      url: api.rooms.url, // 修正拼写错误
      method: "GET",
      dataType: "json",
      timeout: api.timeout
    }).then(function(data) {
      return data.rooms.map(item => item.name); // 加上return,把处理后的数组传递出去
    });
  }
}

主JS文件的正确调用方式

因为getRooms现在返回的是一个能拿到房间数组的Promise,你需要用下面两种方式之一来接收异步结果:

方法1:用Promise的then链式调用

$(document).ready(function() {
  api.rooms.getRooms().then(function(roomNames) {
    // 先判断数组是否有数据,避免报错
    if (roomNames.length > 0) {
      $("#title").text(roomNames[0]);
    } else {
      $("#title").text("暂无房间数据");
    }
  }).catch(function(error) {
    // 处理请求失败的情况
    console.error("获取房间数据失败:", error);
    $("#title").text("加载失败");
  });
});

方法2:用async/await(更像同步代码,可读性更高)

$(document).ready(async function() { // 给ready回调加上async关键字
  try {
    const roomNames = await api.rooms.getRooms();
    if (roomNames.length > 0) {
      $("#title").text(roomNames[0]);
    } else {
      $("#title").text("暂无房间数据");
    }
  } catch (error) {
    console.error("获取房间数据失败:", error);
    $("#title").text("加载失败");
  }
});

这样就能正确获取到getRooms返回的房间名称数组,顺利取出第一个元素显示在#title里啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:27:16