为什么当我在其中调用函数时,for循环仅通过一次?

时间:2019-02-10 15:13:37

标签: node.js

我从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

1 个答案:

答案 0 :(得分:1)

使用var声明vars。即for(var i = 0 .... 如果声明不带var关键字的vars,则它们在全局范围内。 .....并且您在函数内部使用了另一个变量,但现在从外部for循环开始使用相同的变量。