javascript - 队列有问题

标签 javascript arrays discord.js

我最近开始研究这个音乐机器人,但我遇到了队列系统的问题。我请求多个内容,但最终只播放两个内容。
代码:

case "~play":

  if (queue.length == 0) {
    queue.push(args[1]);
    dispatcher = guild.voiceConnection.playStream(ytdl(queue[0], {
      filter: 'audioonly'
    })).on('end', () => {

      console.log('finished');
      queue.shift();

      guild.voiceConnection.playStream(ytdl(queue[0], {
        filter: 'audioonly'
      }));

    });
  } else queue.push(args[1]);

  break;

队列变量一开始是一个空数组。

最佳答案

按照您的逻辑,预计只会播放 2 个项目。

您的逻辑仅允许播放流两次:第一次是队列为空时,第二次是第一次播放结束时。第二场比赛结束时没有任何行动。

更新逻辑,每次当 playStream 结束且队列不为空时调用 playStream,如下所示:

...
case "~play":

  if (queue.length == 0) {
    queue.push(args[1]);
    playNext();
  } else queue.push(args[1]);

  break;
...
function playNext() {
    dispatcher = guild.voiceConnection.playStream(ytdl(queue[0], {
      filter: 'audioonly'
    })).on('end', () => {

      console.log('finished');
      queue.shift();
      // if more songs in the queue call playNext()
      // this will allow you to playNext every time when playStream ends 
      if (queue.length > 0) {
          playNext(); 
      }    
    });
}
...     

关于javascript - 队列有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660697/

相关文章:

javascript - 使用 Async/Await 计算来自 3 个不同循环的错误,这些循环在每次迭代时调用异步函数

javascript - 按可变列数对数组进行排序

c++ - 将 2D 数组传递给函数

javascript - Jquery - 来自选择器组的 $(this) id

javascript - 无法读取未定义的属性 'addRole'

javascript - 返回显示未定义的 javascript

node.js - 使用 'npm'时需要登录github

javascript - Kendo Grid - 不允许编辑某些记录

javascript - 用户输入生成子字符串

javascript - 仅当 div 包含 2 个特定 div 时才单击