我想知道如何执行异步功能,我的目标是上传文件并压缩它们......但它不起作用,因为当我写.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');
});
答案 0 :(得分:2)
您过早地调用callback()
。在callback();
回调中移动.write()
,如下所示:
.write(newFileName, function (err) {
if (!err) console.log('done');
if (err) console.log(err);
callback(err);
});
执行回调时,表示任务已完成。因此,如果没有上述更改,您基本上会告诉async
您已立即完成。