12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 'use strict';
- module.exports = (stream, throwError) => {
- return new Promise((resolve, reject) => {
- if (typeof stream.resume !== 'function') {
- return resolve();
- }
- // unpipe it
- stream.unpipe && stream.unpipe();
- // enable resume first
- stream.resume();
- if (stream._readableState && stream._readableState.ended) {
- return resolve();
- }
- if (!stream.readable || stream.destroyed) {
- return resolve();
- }
- function cleanup() {
- stream.removeListener('end', onEnd);
- stream.removeListener('close', onEnd);
- stream.removeListener('error', onError);
- }
- function onEnd() {
- cleanup();
- resolve();
- }
- function onError(err) {
- cleanup();
- // don't throw error by default
- if (throwError) {
- reject(err);
- } else {
- resolve();
- }
- }
- stream.on('end', onEnd);
- stream.on('close', onEnd);
- stream.on('error', onError);
- });
- };
|