首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ytdl-核存储视频标题变量

ytdl-核存储视频标题变量
EN

Stack Overflow用户
提问于 2017-09-28 04:21:55
回答 1查看 1.2K关注 0票数 1

我的Discord.js机器人有以下内容,在执行命令$music queue时,它会在不和谐的通道中发送一条消息,其中包含要播放的下一个标题:首先,循环遍历队列数组中的所有元素(这些元素都是youtube链接):

代码语言:javascript
复制
          // Loop through each links and get their info.title with ytdl. Then, store it in queue.
          conf.settings[server.id].queue.forEach((link, i) => {
            ytdl.getInfo(link, function(err, info){
              queue += `${i + 1}. ${info.title}\n`;
            });
          });
          message.channel.send(queue);

发送的消息很简单:

Music Queue:

当它应该发送:

Music Queue: 1. songTitle 2. songTitle

现在,我知道这与我认为ytdl.getInfo()是一个异步函数有关(但不完全确定)。我在很多网站上都在寻找这方面的信息,但是在ytdl的回调函数中执行的代码只在使用console.log时才会产生结果,顺便说一句,这也适用于我,但这不是我想要的。(它只适用于console.log,这就是我认为它是一个异步函数的原因)

与其将其登录到控制台中,我希望将其实际存储在变量'queue‘中,如代码所示。我知道我需要一些东西来延迟剩下的部分,并让它等待ytdl函数的完成,然后继续执行剩下的代码,但是我只是没有选择了。我尝试了回调、承诺和氏族(但在那之前我还不熟悉承诺和氏族,所以我可能做错了,回调可能会变得混乱,所以我可能也搞砸了)。我还没有尝试过超时,但我认为这种情况并不是很好的实践,特别是考虑到这是一个处理来自多台服务器的命令的机器人。

有人知道我如何将ytdl.getInfo()中的信息存储在变量中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-29 16:23:23

我发现了一个使用异步(我认为需要节点7.x )的工作,直到我发现了它并更新了节点。

代码语言:javascript
复制
          async function queue() {
            var queue = "Music Queue:\n"
            var msg = await message.channel.send(`Fetching queue info...`);
            for(var i = 0; i < conf.settings[server.id].queue.length; ++i){
              const info = await ytdl.getInfo(conf.settings[server.id].queue[i]);
              queue += `${i + 1}. ${info.title}\n`;
            }
            msg.edit(queue);
          }

          queue();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46460931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档