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
相关产品推荐
相关产品推荐

