123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 'use strict';
- const Stream = require('stream').Stream;
- module.exports = (stream, type) => {
- return new Promise((resolve, reject) => {
- if (type === 'read' && !isReadable(stream)) return reject(new Error('Only support readable stream'));
- if (type === 'write' && !isWritable(stream)) return reject(new Error('Only support writable stream'));
- const event = type === 'read' ? 'end' : 'finish';
- stream.once(event, success);
- stream.once('error', fail);
- if (isReadable(stream)) stream.resume();
- function success() {
- clean();
- resolve();
- }
- function fail(err) {
- clean();
- reject(err);
- }
- function clean() {
- stream.removeListener(event, success);
- stream.removeListener('error', fail);
- }
- });
- };
- function isReadable(stream) {
- return isStream(stream) && typeof stream._read === 'function';
- }
- function isWritable(stream) {
- return isStream(stream) && typeof stream._write === 'function';
- }
- function isStream(stream) {
- return stream instanceof Stream;
- }
|