如何从 discord.js 中删除 [object Promise]?

Posted

技术标签:

【中文标题】如何从 discord.js 中删除 [object Promise]?【英文标题】:How can I remove [object Promise] from discord.js? 【发布时间】:2021-08-17 02:55:57 【问题描述】:

我正在制作一个平衡系统,并创建了一个 give 命令。每当我给某人一些钱(例如 10 美元)时,他们的余额显示为“10 美元 [object Promise]”。如何删除“[object Promise]”?

完整的命令代码:

        if (command === 'give') 

            if (!args[0]) return message.channel.send('how much are you gonna send?')

            if (isNaN(args[0])) return message.channel.send('format: xd give [amount] [@user]')

            const money = args[0];

            const emb = new Discord.MessageEmbed()
            .setColor('GRAY')
            .setTitle('you gave them the $$')
            .setDescription(`you gave $message.mentions.users.first().username the $$$$$$ (` + args[0] + ` to be exact)`)
            .setTimestamp()
            .setFooter('sent to pokimane');

            message.channel.send(emb);

            const money2 = moneyAmount - args[0];

            if (isNaN(money2)) 
                Number(money2);
            

            moneydb.set(message.author.id, money2);



                        const uMA = moneydb.get(message.mentions.users.first().id);

                        const money3 = args[0] + uMA;

                        moneydb.set(message.mentions.users.first().id, money3);
        
// keyv connection
const moneydb = new Keyv('mysql://[user and pass]@localhost:3306/money');

连数据库最后都有[object promise]

phpMyAdmin screenshot

【问题讨论】:

[object Promise] 表示您正在尝试发送一个承诺对象 您必须先向我们展示该承诺的来源代码,然后我们才能提供有关如何正确处理该承诺的想法。 @jfriend00 虽然没有任何承诺...... 好吧,显然你不知道,但显然有人试图变成一个字符串,这就是 [object Promise] 的来源。您能否显示计算或显示余额所涉及的所有代码,因为沿着该执行线的某个地方,涉及到一个承诺。 @jfriend00 我更新了更多信息 【参考方案1】:

如果moneydb 是您的问题中出现的 Keyv 数据库,那么这行代码:

const uMA = moneydb.get(message.mentions.users.first().id);

向 uMA 承诺。您显然缺少像这样的await

const uMA = await moneydb.get(message.mentions.users.first().id);

所以,当你这样做时:

 const money3 = args[0] + uMA;

uMA 是一个promise,它试图将它们都变成一个字符串,然后你会得到包含[object Promise] 的输出。

仅供参考,您可以从 Keyv 文档 here 中看到 .set().get() 都返回承诺。

【讨论】:

以上是关于如何从 discord.js 中删除 [object Promise]?的主要内容,如果未能解决你的问题,请参考以下文章

如何从用户 discord.js v12 中删除所有角色?

discord.js 如何删除所有频道中包含黑名单的消息

Discord.js 删除命令消息

discord.js - 从所有成员中删除特定角色

从 discord.js 中的数组中删除 args

从服务器中删除所有频道(语音和文本) - discord.js