0

我想知道如何执行异步函数,我的目标是上传文件并压缩它们......但它不起作用,因为当我编写 .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');

});

4

1 回答 1

2

你打电话callback()太早了。像这样移动callback();到你的.write()回调内部:

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

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

于 2014-10-01T12:31:45.167 回答