如何多次编辑不和谐消息?

时间:2021-04-11 00:12:51

标签: javascript node.js discord discord.js bots

如何在延迟的情况下多次编辑同一条消息...?

这是我尝试过的...:

        message.channel.send(`a`)
        .then(message => {
          setTimeout( () => {
          message.edit(`ab`)
          },1000);
        })
        .then(message => {
          setTimeout( () => {
          message.edit(`abc`)
          },1000);
        })
        .then(message => {
          setTimeout( () => {
          message.edit(`abcd`)
          },1000);
        })
        .then(message => {
          setTimeout( () => {
          message.edit(`abcde`)
          },1000);
        });

像这样应该可以工作,但如果我尝试这个错误是:当然Cannot read property 'edit' of undefined(错误在“message.edit(abc)”部分。)

1 个答案:

答案 0 :(得分:1)

问题是第二个.then

没有传入任何内容

传递给下一个.then的值始终是前一个.then的返回值

例如:

Promise.resolve('foo').then(value => {
  console.log(value)
  return 'abc'
}).then(console.log)

将拳头记录 foo 然后 abc

我能想到的最简单的解决方案是每次将 setTimeout 延迟增加 1000

message.channel.send('a').then(message => {
  setTimeout(() => message.edit('ab'), 1000)
  setTimeout(() => message.edit('abc'), 2000)
  setTimeout(() => message.edit('abcd'), 3000)
  setTimeout(() => message.edit('abcde'), 4000)
})

如果你想让它更通用,你可以这样做:

function changeMessage(delay, messages, message) {
  for(i in messages) {
    setTimeout(() => message.edit(messages[i]), delay * i)
  }
}

message.channel.send('a').then(message => changeMessage(1000, ['ab', 'abc', 'abcd', 'abcde'], message))

函数 changeMessage 接受延迟时间、消息数组和您要编辑的实际消息对象,并且每隔 x 秒将消息编辑为消息数组中的每个新字符串

这个问题有一个很好的语法解决方案,但如果你想顺序运行一堆 Promises,通常使用 async/await 会更容易