0

非同期関数を実行する方法を知りたいのですが、私の目標はファイルをアップロードして圧縮することです...しかし、.zipを書いたときにファイルがまだアップロードされていないため、機能しません...

SO私は空の.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 に答える