diff --git a/lib/core.js b/lib/core.js index b04010fd8..d782e6a62 100644 --- a/lib/core.js +++ b/lib/core.js @@ -803,7 +803,22 @@ Archiver.prototype.finalize = function() { this._finalize(); } - return this; + var self = this; + + return new Promise(function(resolve, reject) { + var errored; + + self._module.on('end', function() { + if (!errored) { + resolve(); + } + }) + + self._module.on('error', function(err) { + errored = true; + reject(err); + }) + }) }; /** diff --git a/test/archiver.js b/test/archiver.js index 4f6a989c2..640331435 100644 --- a/test/archiver.js +++ b/test/archiver.js @@ -361,5 +361,24 @@ describe('archiver', function() { }); }); + describe('#promise', function() { + var archive; + + it('should use a promise', function(done) { + archive = archiver('json'); + var testStream = new WriteStream('tmp/append.json'); + + archive.pipe(testStream); + + archive + .append(testBuffer, { name: 'buffer.txt', date: testDate }) + .append(fs.createReadStream('test/fixtures/test.txt'), { name: 'stream.txt', date: testDate }) + .append(null, { name: 'directory/', date: testDate }) + .finalize() + .then(function() { + done() + }) + }); + }) }); });