1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 | function read(stream) {
|
6 |
|
7 | if(stream.then)
|
8 | return stream.then(read);
|
9 |
|
10 | return new Promise(function(resolve, reject) {
|
11 |
|
12 |
|
13 | var state = stream._readableState;
|
14 | if(state && state.ended && !state.length)
|
15 | resolve(null);
|
16 |
|
17 | if(stream.isPaused())
|
18 | resolve(stream.read());
|
19 |
|
20 |
|
21 | let onData = function (result) { cleanup(); resolve(result); };
|
22 | let onEnd = function () { cleanup(); resolve(null); };
|
23 | let onError = function (err) { cleanup(); reject(err); };
|
24 |
|
25 | stream.once('data', onData);
|
26 | stream.once('end', onEnd);
|
27 | stream.once('error', onError);
|
28 |
|
29 | let cleanup = function() {
|
30 | stream.removeListener('data', onData);
|
31 | stream.removeListener('error', onError);
|
32 | stream.removeListener('end', onEnd);
|
33 | };
|
34 |
|
35 | return stream;
|
36 | });
|
37 | }
|
38 |
|
39 |
|
40 | module.exports = read;
|