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

JavaScript函数get_coin_price_BTC未返回预期数值问题求助

解决get_coin_price_BTC函数无返回值的问题

这个问题我之前也碰到过,核心是没搞清楚异步操作的执行顺序!你看,binance.prices()是一个异步API调用,它的回调函数要等Binance的API返回数据后才会执行,但你的return x;语句在这个回调执行前就跑了——这时候x还是初始的空字符串,所以函数自然返回不了预期的数值。

解决方案1:用Promise封装(推荐现代JS写法)

把函数改成返回Promise的形式,这样就能正确等待异步操作完成后返回价格:

function get_coin_price_BTC(coin) {
  return new Promise((resolve, reject) => {
    binance.prices(function(ticker) {
      const pair = (coin + "btc").toUpperCase();
      const price = ticker[pair];
      console.log("Price of " + pair + ": " + price);
      
      if (price) {
        resolve(parseFloat(price)); // 转成数值类型返回,符合你的需求
      } else {
        reject(new Error(`找不到交易对 ${pair} 的数据`));
      }
    });
  });
}

调用的时候可以用async/await(更直观):

async function fetchBTCPrice() {
  try {
    const ethPrice = await get_coin_price_BTC("eth");
    console.log("ETH/BTC 价格:", ethPrice);
    // 这里可以直接用ethPrice做后续逻辑
  } catch (err) {
    console.error("获取价格失败:", err.message);
  }
}

fetchBTCPrice();

或者用传统的.then()链式调用:

get_coin_price_BTC("bnb")
  .then(price => console.log("BNB/BTC 价格:", price))
  .catch(err => console.error("出错了:", err.message));

解决方案2:用回调函数(兼容旧代码场景)

如果不想用Promise,也可以给函数加个回调参数,在异步操作完成后调用回调传递结果:

function get_coin_price_BTC(coin, callback) {
  binance.prices(function(ticker) {
    const pair = (coin + "btc").toUpperCase();
    const price = ticker[pair];
    console.log("Price of " + pair + ": " + price);
    
    if (price) {
      callback(null, parseFloat(price)); // 成功时第一个参数传null,第二个传价格
    } else {
      callback(new Error(`交易对 ${pair} 不存在`)); // 失败时传错误对象
    }
  });
}

调用方式:

get_coin_price_BTC("sol", (err, price) => {
  if (err) {
    console.error("获取价格失败:", err.message);
    return;
  }
  console.log("SOL/BTC 价格:", price);
  // 后续操作写在这里
});

为什么原来的代码不行?

再给你捋一遍执行顺序:

  1. 调用get_coin_price_BTC("eth"),初始化x = ""
  2. 调用binance.prices(),发起API请求(这一步是异步的,不会阻塞代码)
  3. 直接执行return x;,此时x还是空字符串,函数返回
  4. 过了一会儿,Binance API返回数据,回调函数执行,把x赋值为正确的价格,但这时候函数已经返回了,根本拿不到这个值!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:49