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

NuxtJS/VueJS环境下TradingView调用getBars的onHistoryCallback报错问题

问题排查结果

核心错误原因

你的代码存在3个逻辑问题,直接导致报错:

  • this.$axios.$get 后直接换行写参数括号,触发JS自动分号插入机制,请求逻辑没有正确执行
  • onErrorCallback 放在了axios异步请求的外部,会在发起请求时同步立即执行,而非请求失败时才触发,直接打乱TradingView的回调时序
  • 没有给axios请求添加.catch()捕获异常分支,请求报错时无法正确触发错误回调

修正后代码

getBars: (symbolInfo, resolution, periodParams, onHistoryCallback, onErrorCallback, firstDataRequest) => {
  this.$axios.$get(
    this.datafeedUrl + '/history?symbol=' +
    symbolInfo.name +
    '&resolution=' + resolution +
    '&from=' + periodParams.from +
    '&to=' + periodParams.to +
    '&countback=20'
  )
  .then((r) => {
    let bars = [];
    // 补充返回数据非空校验,避免接口返回空结构时报错
    if (!r || !r.t || !Array.isArray(r.t) || r.t.length === 0) {
      onHistoryCallback([], {noData: true})
      return
    }
    for (let i = 0; i < r.t.length; ++i) {
      let bar = {
        time: 1e3 * r.t[i],
        close: parseFloat(r.c[i]),
        open: parseFloat(r.o[i]),
        high: parseFloat(r.h[i]),
        low: parseFloat(r.l[i]),
        volume: parseFloat(r.v[i])
      }
      bars.push(bar)
    }
    // 补充K线按时间升序校验,TradingView要求K线必须按时间从小到大排列
    bars.sort((a, b) => a.time - b.time)
    onHistoryCallback(bars, {noData: false})
  })
  .catch((e) => {
    // 错误回调放在catch分支,仅请求失败时触发
    onErrorCallback(e)
    console.log(e)
  })
},

附加校验建议

  • 确认接口返回的r.t字段是Unix秒级时间戳,避免接口已经返回毫秒级时间戳导致乘1000后时间超出合理范围
  • 确认返回的K线没有重复时间戳,TradingView不允许同周期出现重复时间的K线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:15:03