如何从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
相关产品推荐
相关产品推荐

