Я создаю музыкального бота Discord, и мне нужно сгенерировать один объект с помощью этой функции.Проблема в том, что функция возвращается слишком рано, и объект строится не полностью.Цикл в функции завершается только после выхода из функции.
Функция fetchVideoInfo()
выполняет переданный обратный вызов в функции .then()
, обещая, что он возвращается, как указано на изображении.Однако я не могу редактировать это, потому что это часть модуля.Проблема в том, что, несмотря на то, что я ожидаю завершения fetchVideoInfo()
, он все еще продолжается из-за того, как он написан, выполняя обратный вызов после внутреннего обещания.Я предоставлю ту часть кода, которая возвращает фактическое обещание и вызывает функцию обратного вызова.Я попытался получить обещание возврата функции, но оно не сработало, потому что я думаю, что это та же проблема, функция завершается до обратного вызова, который я должен ждать.Я также попытался обернуть функцию обратного вызова в другую и затем передать ее, ожидая начальной функции, но это также не помогло.
https://imgur.com/HdFF8VJ Это ссылка на изображение возвратазначение в этом модуле ("youtube-info").Весь модуль на самом деле является fetchVideoInfo()
функцией
async function generatePlayList(queue) {
const date = new Date();
let embed = new Discord.RichEmbed();
embed
.setTitle("Playlist")
.setColor("#25473A")
.setDescription("Music currently in playlist!")
.setFooter("Time ")
.setTimestamp(date);
for await (let id of queue)
fetchVideoInfo(id, (Null, info) => {
const { duration, title, url } = info;
const seconds = duration % 60;
const minutes = Math.trunc(duration / 60);
embed.addField(`[${title}](${url})`, `Duration ${minutes}:${seconds}`);
console.log(embed.fields);
});
console.log(embed.fields);
return embed;
}
. Теперь происходит то, что функция сначала возвращает результат, в результате чего embed
объект остается неизменным, даже если есть цикл - await - (он новыйСинтаксис ES2018) перед этим.Сначала он должен завершить цикл for -, а затем вернуть