NodeJS中的异步并行

时间:2014-10-01 12:08:55

标签: node.js asynchronous node-async

我想知道如何执行异步功能,我的目标是上传文件并压缩它们......但它不起作用,因为当我写.zip时我的文件还没有上传... < / p>

所以我得到一个空的.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');

});

1 个答案:

答案 0 :(得分:2)

您过早地调用callback()。在callback();回调中移动.write(),如下所示:

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

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