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

如何从Highcharts.getJSON这类异步函数中获取返回值?

解决Highcharts.getJSON异步数据传递到外部的问题

Highcharts.getJSON是异步HTTP请求函数,和你写的info2这种同步函数逻辑完全不同:

  • 同步函数执行时会立刻完成计算并返回结果;
  • 异步函数发起请求后会直接往下执行后续代码,等服务器返回数据后才会触发回调函数。你在回调里return data毫无意义,因为这个return值不会被外层的Highcharts.getJSON接收,变量d拿到的只是请求本身的实例对象,不是接口返回的data。

下面是三种可行的解决方案:

方案1:直接在回调内处理数据(最直观)

把需要使用data的逻辑直接写在回调函数里,或者封装成独立函数后在回调中调用:

// 封装处理数据的逻辑
function useStockData(data) {
  console.log('拿到的数据:', data);
  console.log(typeof Highcharts.stockChart);
  // 这里写你需要用data做的操作,比如渲染股票图表
  Highcharts.stockChart('chart-container', {
    series: [{ data: data }]
  });
}

// 发起请求并传入处理函数
Highcharts.getJSON('https://demo-live-data.highcharts.com/aapl-c.json', useStockData);

方案2:封装为Promise,用.then或async/await处理

将请求封装成Promise,适配现代异步代码写法,让逻辑更清晰:

// 封装请求为Promise
function getStockData() {
  return new Promise((resolve, reject) => {
    Highcharts.getJSON('https://demo-live-data.highcharts.com/aapl-c.json', (data) => {
      resolve(data); // 请求成功时返回数据
    }).fail((err) => {
      reject(err); // 请求失败时返回错误
    });
  });
}

// 方式A:用.then链式调用
getStockData().then(data => {
  console.log(data);
  // 处理数据的逻辑写在这里
}).catch(err => {
  console.error('请求出错:', err);
});

// 方式B:用async/await(必须在async函数内使用)
async function processStockData() {
  try {
    const data = await getStockData();
    console.log(data);
    // 处理数据
  } catch (err) {
    console.error('请求出错:', err);
  }
}
processStockData();

方案3:直接利用请求返回的Promise接口

如果你的Highcharts版本依赖的jQuery支持Promise(大部分现代版本都支持),Highcharts.getJSON返回的jqXHR对象本身就实现了Promise接口,可以直接用.then:

Highcharts.getJSON('https://demo-live-data.highcharts.com/aapl-c.json')
  .then(data => {
    console.log(data);
    // 处理数据的逻辑
  })
  .catch(err => {
    console.error('请求失败:', err);
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:05:15