我从API获得了视频列表,它具有缩略图的URL列表,我想将每个视频的缩略图合并为gif。当我遍历视频并且不生成gif时,它会按预期进行5次,但是如果我包含应生成gif的函数,则它只会经历一次,没有任何错误。我不知道发生了什么
我正在使用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.log(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.log(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
答案 0 :(得分:1)
使用var声明vars。即for(var i = 0 .... 如果声明不带var关键字的vars,则它们在全局范围内。 .....并且您在函数内部使用了另一个变量,但现在从外部for循环开始使用相同的变量。