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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:01