2014-10-01 49 views
0

我想知道如何執行異步函數,我的目標是上傳文件並壓縮它們......但它不起作用,因爲我的文件尚未上傳時,我寫的.zip ...異步並行在NodeJS

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

 
});

回答

2

你太早調用callback()。移動callback();裏面你.write()回調,像這樣:

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

當您執行的回調,這意味着任務完成。所以如果沒有上述改變,你基本上會告訴async你立即完成。

+0

是的工作,非常感謝你:) – tonymx227 2014-10-01 12:37:25