JS调用async函数返回[object Promise]及发空消息问题求助
问题根因
所有使用async关键字声明的函数,返回值默认是Promise对象。你调用getSteamID时没有加await关键字,拿到的rawSteamID本身就是Promise实例,直接调用toString()转换后自然输出[object Promise]。你添加的固定时长setTimeout等待逻辑完全无效,无法替代await获取Promise的异步返回结果,且不可靠,无法适配不同网络环境下的接口响应耗时。
你之前去掉超时逻辑后触发Cannot send an empty message报错,是因为此时Promise还没有完成执行,拿到的返回值为空,不符合Discord消息发送接口的参数要求。
修复方案
无需修改getSteamID函数本身,仅调整测试命令的调用逻辑即可:
const getSteamInfo = require('../functions/getSteamInfo'); module.exports.run = async (bot, message, args) => { var vanityURL = args.join(' ') // 直接await异步函数调用,即可拿到返回的steamID const steamID = await getSteamInfo.getSteamID(vanityURL); message.channel.send(steamID) }; module.exports.command = { name: `test` }
可选优化建议
你当前getSteamID中把返回结果序列化再用正则过滤的处理逻辑稳定性较差,可直接从JSON对象中取值,避免接口返回格式微调就导致逻辑失效:
const fetch = require("node-fetch"); const botconfig = require("../botconfig.json") async function getSteamID(vanityURL) { const response = await fetch(`https://api.steampowered.com/ISteamUser/ResolveVanityURL/v1/?key=${botconfig.steamapikey}&vanityurl=${vanityURL}`); const data = await response.json(); // 直接从返回的JSON结构中取steamid,取值失败默认返回空字符串 const steamID = data?.response?.steamid || '' console.log(steamID) return steamID; } module.exports = { getSteamID }
内容的提问来源于stack exchange,提问作者LUKΛS
相关产品推荐
相关产品推荐

