我正在使用模块archiver
生成一个zip文件。我想等待zip文件生成后再继续。下面是代码的相关部分。
// create a file to stream archive data to.
const archiver = require('archiver');
const fs = require('fs');
async function zipcsv(zipPath) {
let output = fs.createWriteStream(zipPath);
let archive = archiver('zip', {
zlib: { level: 9 } // Sets the compression level.
});
output.on('close', function() {
return 'zip generating complete';
});
archive.pipe(output);
archive.directory('exports/', false);
archive.finalize();
}
module.exports.zipcsv = zipcsv;
个字符
我在控制台上看到了进一步的处理,该进程没有等待zip生成并继续。
如何确保zip生成后继续进行进一步的处理?
- 谢谢-谢谢
2条答案
按热度按时间h79rfbju1#
archive.finalize()
意味着zip文件中的子文件的追加已完成,但它并不意味着写入流已完成。在node-archiver库的README代码指针中也提到了这一点。还有一个issue围绕这一点,但我没有看到任何行动项目正在采取这一点。
有两种方法可以解决这个问题:
1.使用回调方法等待写入流完成。
字符串
1.您可以使用adm-zip,它允许您直接在磁盘或内存缓冲区中处理zip文件。与node-archiver库相比,它的使用也更简单。
Sample usage:
型
vsnjm48y2#
你需要在async函数中使用一个Promise函数。然后使用resolve和reject代替return。