Я получил список видео из API, у него есть список URL-адресов миниатюр, и я хотел бы объединить миниатюры каждого видео в gif. Когда я просматриваю видео и не генерирую гифки, он проходит 5 раз, как и ожидалось, но если я включаю функцию, которая должна генерировать гифки, она проходит только один раз без каких-либо ошибок. я понятия не имею, что происходит
Я использую node.js, discord.js, получаю пиксели и модули gif-кодировщика для создания миниатюр.
for(i=0;i<5;i++){
generateThumbnail(data[i].video.video_id,data[i].video.thumbs,function(){
var tags = '';
for(t=0;t<data[i].video.tags.length;t++){
tags = tags + data[i].video.tags[t].tag_name+', ';
}
fields = [
{name:data[i].video.title,
value:value},
{name:'Tags',
value:tags}
]
msg.channel.send({embed: {
color: 3447003,
thumbnail: {
"url": ""
},
fields: fields,
}});
});
}
function generateThumbnail(id,images,fn){
var pics = [];
console.info(id)
var file = require('fs').createWriteStream(id+'.gif');
var gif = new GifEncoder(images[0].width, images[0].height);
gif.pipe(file);
gif.setQuality(20);
gif.setDelay(1000);
gif.setRepeat(0)
gif.writeHeader();
for(i=0;i<images.length;i++){
pics.push(images[i].src)
}
console.info(pics)
addToGif (pics,gif);
fn()
}
var addToGif = function(images,gif, counter = 0) {
getPixels(images[counter], function(err, pixels) {
gif.addFrame(pixels.data);
gif.read();
if (counter === images.length - 1) {
gif.finish();
} else {
addToGif (images,gif, ++counter);
}
})
}
если я не использую функцию GenerateThumbnail, она проходит 5 раз, как и ожидалось, и все работает нормально, но если я ее использую, она проходит только один раз и генерирует только 1 gif





Используйте var для объявления vars. Т.е. for(var i=0.... Если вы объявляете переменные без ключевого слова var, они находятся в глобальной области видимости. ..... и вы используете другую переменную i внутри функции, но теперь это та же самая переменная из внешнего цикла for.