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

将异步函数中获取的股票API数据保存到全局变量时返回空数组的问题求助

问题分析与解决方案

这个问题本质是异步代码的执行顺序导致的,我来一步步给你拆解:

为什么打印出空数组?

你写的main是异步函数,里面的await会暂停函数执行,等待API请求完成。但你在全局作用域直接调用console.log(data),这行代码是同步执行的——它会在main函数里的API请求完成、data = newData赋值之前就运行,所以此时data还是初始的空数组[]。

另外还有个小细节:你代码里定义了main函数,但没调用它!这也是容易忽略的坑哦!

修复方案

我给你几种可行的解决方式,选适合你环境的就行:

方案1:在异步函数内部打印/处理数据

把console.log放到main函数里,确保在数据赋值完成后再执行:

const yahooStockAPI = require('yahoo-stock-api');
let data = [];
async function main() {
  const startDate = new Date('07/01/2021');
  const endDate = new Date('07/25/2021');
  // 注意:API返回的是包含response数组的对象,如果你只需要股票数据数组,要取response
  const newData = await yahooStockAPI.getHistoricalPrices(startDate, endDate, 'AAPL', '1d');
  data = newData.response; // 这里取response才是你要的数组
  console.log(data); // 此时数据已经正确赋值
};
main(); // 别忘了调用main函数!

方案2:用.then()处理异步函数的返回值

如果不想把所有逻辑都塞到main里,可以利用异步函数返回Promise的特性:

const yahooStockAPI = require('yahoo-stock-api');
let data = [];
async function main() {
  const startDate = new Date('07/01/2021');
  const endDate = new Date('07/25/2021');
  const newData = await yahooStockAPI.getHistoricalPrices(startDate, endDate, 'AAPL', '1d');
  return newData.response;
};
// 等待main执行完成后再处理数据
main().then((stockData) => {
  data = stockData;
  console.log(data);
  // 这里可以继续写保存CSV的逻辑
});

方案3:使用顶层await(Node.js 14.8+或支持的环境)

如果你的运行环境支持顶层await(比如新版Node.js、现代浏览器模块),可以直接在全局作用域等待main执行:

const yahooStockAPI = require('yahoo-stock-api');
let data = [];
async function main() {
  const startDate = new Date('07/01/2021');
  const endDate = new Date('07/25/2021');
  const newData = await yahooStockAPI.getHistoricalPrices(startDate, endDate, 'AAPL', '1d');
  return newData.response;
};
// 顶层await直接等待异步操作完成
data = await main();
console.log(data);
// 接下来就可以处理保存CSV的逻辑了

额外提醒

你提到最终要把数组保存为CSV,记得API返回的newData是一个包含error、currency、response的对象,真正的股票数据数组在newData.response里,别直接把整个对象存成CSV哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:57:50