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

如何在API请求的回调函数外部访问其内部赋值的变量?

异步回调变量访问问题解决方案

问题本质

这是典型的JavaScript异步执行时序问题:
finnhubClient.quote 属于异步网络请求API,你传入的回调函数会在网络请求完成后才触发执行;而回调外的console.log(currentPrice) 会在调用quote方法后立刻运行,此时回调还未执行,currentPrice 还没被赋值,所以拿到的是初始的undefined。

解决方法

方案1:逻辑移入回调内

所有需要用到currentPrice的操作都放到回调函数中,保证变量赋值完成后再执行:

//Get the current market price
var marketSymobl = checkOrders[i].symbol.split(" - ")[0].toUpperCase()
console.log(checkOrders[i].symbol)
finnhubClient.quote(marketSymobl, (error, data, response) => {
  const currentPrice = data.c
  // 所有依赖currentPrice的逻辑都写在这里
  console.log(currentPrice)
  // 后续处理代码
});

方案2:封装Promise配合async/await

如果要避免多层回调嵌套,可将请求封装为Promise,用同步书写逻辑处理异步流程:

// 封装quote请求为Promise对象
function getCurrentPrice(symbol) {
  return new Promise((resolve, reject) => {
    finnhubClient.quote(symbol, (error, data, response) => {
      if (error) return reject(error)
      resolve(data.c)
    })
  })
}

// 在async函数中调用
async function handleOrder() {
  const marketSymobl = checkOrders[i].symbol.split(" - ")[0].toUpperCase()
  console.log(checkOrders[i].symbol)
  // 等待请求返回后再执行后续逻辑
  const currentPrice = await getCurrentPrice(marketSymobl)
  console.log(currentPrice)
  // 后续处理代码
}

// 触发执行
handleOrder()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:07