So this is my code for sending an embed, that says Loading shop with the dots changing. However, I am getting a pretty strange error message, which first tells me the error is at msg.delete() with "UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'delete' of undefined" and then a second one at the second msg.edit() saying "Cannot read property 'edit' of undefined". I searched up the docs and many forums, but the .then() syntax should be right. Any idea?
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()});
Solved the problem as follows. The setTimeout
is not getting handled well with promises so I searched up the solution.
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());