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

JavaScript读取JSON数据时Promise输出undefined及Telegram Bot显示[object Promise]问题

Promise输出问题解决方案

错误原因

  • fetch 方法返回的是 Promise异步对象,你定义的dataTransfer变量本质是Promise实例,不是接口返回的实际数据,本身不存在.data属性,直接访问自然返回undefined
  • Promise是异步容器,直接将它放入字符串拼接时,会自动调用toString()方法,就会输出[object Promise]的格式化结果
  • 你在.then回调中返回的exchangedate是Promise兑现后携带的内部值,不会直接挂载到dataTransfer对象上,必须通过异步语法才能读取

修复方案

推荐用更易读的async/await异步语法改写,代码如下:

1. 接口请求逻辑改写

import fetch from 'node-fetch';

// 封装成异步方法,用于获取汇率日期
async function getExchangeDate() {
  const response = await fetch('https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json');
  const data = await response.json();
  return data[0].exchangedate;
}

// 测试打印,用.then接收异步返回的结果
getExchangeDate().then(date => {
  console.log(date);
})

2. Telegram Bot逻辑改写

function start() {
  // 把消息发送方法改成异步,等待接口结果返回后再拼接发送
  async function curData(chatId) {
    const exchangeDate = await getExchangeDate();
    return bot.sendMessage(chatId, `Current data: ${exchangeDate}`);
  }

  bot.on('message', msg => {
    const text = msg.text;
    const chatId = msg.chat.id;

    if (text === '/data') {
      return curData(chatId);
    }

    return bot.sendMessage(chatId, 'idk');
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:54:09