【问题标题】:Async parallel in NodeJSNodeJS 中的异步并行
【发布时间】:2014-11-26 06:34:41
【问题描述】:

我想知道如何执行异步函数,我的目标是上传文件并压缩它们...但是它不起作用,因为当我编写 .zip 时我的文件尚未上传...

所以我得到一个空的 .zip 文件...

var asyncTasks = [];

selectedPhotos.forEach(function(id){
  asyncTasks.push(function(callback){
    var newFileName = pathDir + '/' + id + '.jpg';
    api.media(id, function(err, media, remaining, limit) {
      gm()
      .in('-page', '+0+0')
      .in('./public/images/instabox.jpg')
      .in('-page', '+10+10')
      .in(media.images.thumbnail.url)
      .mosaic()
      .minify()
      .write(newFileName, function (err) {
        if (!err) console.log('done');
        if (err) console.log(err);
      });
    });
    callback();
  });
});

async.parallel(asyncTasks, function(){

  var admZip = new AdmZip();
  var pathDir = './public/uploads/'+reference;
  admZip.addLocalFolder(pathDir);
  var willSendthis = admZip.toBuffer();
  admZip.writeZip('./public/uploads/'+reference+'.zip');

});

【问题讨论】:

    标签: node.js asynchronous node-async


    【解决方案1】:

    你打电话给callback() 太早了。将callback(); 移动到您的.write() 回调中,如下所示:

    .write(newFileName, function (err) {
      if (!err) console.log('done');
      if (err) console.log(err);
      callback(err);
    });
    

    当您执行回调时,表示任务已完成。因此,如果没有上述更改,您基本上是在告诉 async 您立即完成了。

    【讨论】:

      猜你喜欢
      • 2014-11-27
      • 2017-05-27
      • 2013-03-16
      • 1970-01-01
      • 2014-09-12
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多