node.js - 为什么当我调用其中的函数时,我的 for 循环只执行一次?

标签 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

最佳答案

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

关于node.js - 为什么当我调用其中的函数时,我的 for 循环只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617800/

相关文章:

mysql - Nodejs MySql 全局变量限制

php - PHP 和 Node.JS 中西里尔文 sha1 哈希值的差异

node.js - 我正在导入一个异步函数并尝试使用它

node.js - NodejS + PhantomJS 警告 : exit() was called before waiting for commands to finish. 确保您没有过早调用 exit()

javascript - 查找调用函数的文件的位置(nodejs)

mysql - Node js数组值访问问题

node.js - 没有 Express 的 Node 中间件

node.js - 如何将 MongoDB 数据库与dialogfow集成

node.js - 如何迭代属于该教室的学生列表?

node.js - 使用 HTTP 基本身份验证保护 API