我从 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
最佳答案
使用var来声明变量。即 for(var i=0.... 如果声明变量时不使用 var 关键字,则它们位于全局范围内。 .....并且您在函数内使用另一个 i var,但现在它与外部 for 循环的 var 相同。
关于node.js - 为什么当我调用其中的函数时,我的 for 循环只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617800/