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

Node.js异步函数未等待API响应引发undefined错误,如何解决?

解决Node.js异步API调用的等待问题

你的代码有两个核心问题导致了undefined错误,直接调整逻辑就能解决,不需要大重构:

问题1:异步函数调用未使用await

doGetRequest是async函数,调用时如果不用await,返回的是Promise对象而非API实际返回的数据。你直接用obj.bids[i][0]访问Promise的属性,自然会得到undefined。

问题2:doGetRequest未返回数据

函数里只打印了data,但没有把它return出来,就算用了await也拿不到结果。

修正后的完整代码

// 把依赖引入移到文件顶部,避免重复初始化
const axios = require('axios');

async function doGetRequest(URL) {
  const res = await axios.get(URL);
  // 必须return获取到的数据,才能让调用方拿到结果
  return res.data;
}

// 把readBids改成async函数,内部才能使用await
async function readBids(pairs) {
  const TrianglePair = {
    pair: [],
    price: [],
    typeTrade: "",
    tradeAmount: 0,
    highestProfit: ""
  };

  for (let i = 0; i < pairs.length; i++) {
    // 用await等待API请求完成,拿到实际响应数据
    const obj = await doGetRequest(`https://api.kucoin.com/api/v1/market/orderbook/level2_20?symbol=${pairs[i]}`);
    // 注意:你原来写死了SHIB-USDT,这里改成循环变量pairs[i]才符合逻辑
    const tempVal = obj.bids[0][0]; // 根据API返回的orderbook结构,取第一个bid的价格
    TrianglePair.pair.push(pairs[i]);
    TrianglePair.price.push(tempVal);
  }
  // return放在循环外,避免只执行一次循环就提前返回
  return TrianglePair;
}

// 调用readBids的两种方式:
// 方式1:在async函数内用await
async function main() {
  try {
    const result = await readBids(["SHIB-USDT", "BTC-USDT"]);
    console.log(result);
  } catch (err) {
    console.error('请求出错:', err);
  }
}
main();

// 方式2:用.then()处理Promise
readBids(["SHIB-USDT", "BTC-USDT"])
  .then(result => console.log(result))
  .catch(err => console.error('请求出错:', err));

额外注意事项

  • 永远要给异步请求加错误捕获(try/catch或.catch()),避免API请求失败导致程序崩溃。
  • 不要在循环里硬编码请求地址,要结合循环变量动态生成,否则循环失去意义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:20:43