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

如何在JavaScript中调用加密货币API价格并代入数学公式计算

问题修复方案

你的代码存在两个核心问题导致无法正确读取接口返回的价格:

  • 异步请求逻辑嵌套触发死循环:你在calc函数内发起接口请求,又在请求成功的回调里再次调用calc,会无限重复发起请求,不仅占用资源还可能被接口限流。
  • 异步数据同步读取逻辑错误:$.getJSON属于异步请求,你当前把表格计算逻辑写在请求代码之外,代码执行到计算步骤时接口还没有返回结果,自然拿不到实时的HIVE价格。

你可以把HIVE价格存储为全局变量,页面初始化时仅发起一次价格请求,拿到结果后再执行计算,修复后的代码如下:

const toFix = str => (+str).toFixed(6);
// 全局变量存储实时HIVE价格
let HIVEusd = 2;

// 单独封装价格拉取逻辑,页面加载时仅调用一次
const fetchHivePrice = () => {
  $.getJSON("https://min-api.cryptocompare.com/data/price?fsym=HIVE&tsyms=USD", function(data) {
    HIVEusd = data.USD;
    $("#HIVEPrice").text(toFix(HIVEusd));
    // 价格拉取成功后触发全表所有行的计算
    $("tr #HIVEPrice").each((_, el) => calc($(el)));
  }).fail(function(dat, textStatus, error) {
    var err = textStatus + ", " + error;
    alert(err);
  });
}

const calc = $div => {
  // 表格计算逻辑
  const $row = $div.closest("tr")
  const $cells = $row.find("td");
  const qty = +$cells.eq(2).text().split(" ")[0];
  const val = $div.text()
  const res = val * qty
  $cells.eq(3).text(isNaN(res) ? "" : res.toFixed(4));
  
  // 直接使用全局存储的实时价格计算
  const valusd = res * HIVEusd;
  $cells.eq(4).text(isNaN(valusd) ? "" : valusd.toFixed(4));
};

// 页面加载完成后拉取价格
$(document).ready(fetchHivePrice);

核心修改说明:

  • 新增全局变量HIVEusd存储实时价格,避免重复发起接口请求
  • 拆分价格拉取逻辑和表格计算逻辑,从根源避免死循环
  • 价格拉取成功后自动触发全表计算,保证所有数值都使用最新的价格计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:07