discord.js .msg.channel.send().then promise 不起作用
discord.js .msg.channel.send().then promise not working
所以这是我发送嵌入的代码,上面写着 Loading shop with the dots changing。但是,我收到一条非常奇怪的错误消息,它首先告诉我错误在 msg.delete() 处,带有“UnhandledPromiseRejectionWarning: TypeError: Cannot read 属性 'delete' of undefined”,然后是第二个 msg.edit() 说“无法读取未定义的 属性 '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()});
- “然后”不要使用这一切
- 使用 await
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);
解决问题如下。 setTimeout
没有很好地处理承诺,所以我搜索了解决方案。
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());
所以这是我发送嵌入的代码,上面写着 Loading shop with the dots changing。但是,我收到一条非常奇怪的错误消息,它首先告诉我错误在 msg.delete() 处,带有“UnhandledPromiseRejectionWarning: TypeError: Cannot read 属性 'delete' of undefined”,然后是第二个 msg.edit() 说“无法读取未定义的 属性 '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()});
- “然后”不要使用这一切
- 使用 await
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);
解决问题如下。 setTimeout
没有很好地处理承诺,所以我搜索了解决方案。
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());