discord.js .message.channel.send().then 承诺不工作
Posted
技术标签:
【中文标题】discord.js .message.channel.send().then 承诺不工作【英文标题】:discord.js .msg.channel.send().then promise not working 【发布时间】:2021-05-01 12:46:06 【问题描述】:这是我发送嵌入的代码,上面写着“正在加载商店,点会发生变化”。但是,我收到一条非常奇怪的错误消息,它首先告诉我错误在 msg.delete() 处,带有“UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'delete' of undefined”,然后在第二个 msg.edit () 说“无法读取未定义的属性‘编辑’”。我搜索了文档和许多论坛,但 .then() 语法应该是正确的。有什么想法吗?
var embed = new Discord.MessageEmbed().setColor("GOLD").setTitle("Loading shop");
msg.channel.send(embed)
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop.")), 500))
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop..")), 500))
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop...")), 500))
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop")), 500))
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop.")), 500))
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop..")), 500))
.then(msg => setTimeout(()=>msg.edit(embed.setTitle("Loading shop...")), 500))
.then(msg => msg.delete());
【问题讨论】:
then
链接到下一个 then
及其返回值 - 所以你需要在每个 setTimeout
s 之后 return msg
如果你想从闭包中获取msg
,则不要使用msg
参数,因为它可能可用 - 所以msg =>
只是变成() =>
【参考方案1】:
-
不要全部使用“thens”
使用等待
const embed = new Discord.MessageEmbed().setColor("GOLD").setTitle("Loading shop");
const msg = message.channel.send(embed); // i change to message because msg will be used as var name
setTimeout(() =>
// do stuff
msg.edit(embed.setTitle("Loading shop.")); // etc..
, 500);
【讨论】:
【参考方案2】:解决问题如下。 setTimeout
没有得到很好的 promise 处理,所以我搜索了解决方案。
function delay(t, v)
return new Promise(function(resolve)
setTimeout(resolve.bind(null, v), t)
);
Promise.prototype.delay = function(t)
return this.then(function(v)
return delay(t, v);
);
var embed = new Discord.MessageEmbed().setColor("GOLD").setTitle("Loading shop");
msg.channel.send(embed)
.delay(500).then(msg => msg.edit(embed.setTitle("Loading shop.")))
.delay(500).then(msg => msg.edit(embed.setTitle("Loading shop..")))
.delay(500).then(msg => msg.edit(embed.setTitle("Loading shop...")))
.delay(500).then(msg => msg.delete());
【讨论】:
以上是关于discord.js .message.channel.send().then 承诺不工作的主要内容,如果未能解决你的问题,请参考以下文章
我将如何使用两个不同版本的 discord.js | Discord.js 机器人
Discord 错误错误 Discord.js 中的无效令牌
Discord 仅识别 discord.js 中的“ping”命令
错误“const Discord = require(discord.js) ^ ReferenceError: discord is not defined”