aboutsummaryrefslogtreecommitdiff
path: root/node_modules/stream-to-array/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/stream-to-array/index.js')
-rw-r--r--node_modules/stream-to-array/index.js85
1 files changed, 48 insertions, 37 deletions
diff --git a/node_modules/stream-to-array/index.js b/node_modules/stream-to-array/index.js
index 76fcd1fc6..2d6aaa0fb 100644
--- a/node_modules/stream-to-array/index.js
+++ b/node_modules/stream-to-array/index.js
@@ -1,3 +1,6 @@
+
+var Promise = require('any-promise')
+
module.exports = function (stream, done) {
if (!stream) {
// no arguments, meaning stream = this
@@ -8,42 +11,50 @@ module.exports = function (stream, done) {
stream = this
}
- // if stream is already ended,
- // return an array
- if (!stream.readable) {
- process.nextTick(function () {
- done(null, [])
- })
- return defer
- }
-
- var arr = []
-
- stream.on('data', onData)
- stream.once('end', onEnd)
- stream.once('error', onEnd)
- stream.once('close', cleanup)
-
- return defer
-
- function defer(fn) {
- done = fn
- }
-
- function onData(doc) {
- arr.push(doc)
+ var deferred
+ if (!stream.readable) deferred = Promise.resolve([])
+ else deferred = new Promise(function (resolve, reject) {
+ // stream is already ended
+ if (!stream.readable) return resolve([])
+
+ var arr = []
+
+ stream.on('data', onData)
+ stream.on('end', onEnd)
+ stream.on('error', onEnd)
+ stream.on('close', onClose)
+
+ function onData(doc) {
+ arr.push(doc)
+ }
+
+ function onEnd(err) {
+ if (err) reject(err)
+ else resolve(arr)
+ cleanup()
+ }
+
+ function onClose() {
+ resolve(arr)
+ cleanup()
+ }
+
+ function cleanup() {
+ arr = null
+ stream.removeListener('data', onData)
+ stream.removeListener('end', onEnd)
+ stream.removeListener('error', onEnd)
+ stream.removeListener('close', onClose)
+ }
+ })
+
+ if (typeof done === 'function') {
+ deferred.then(function (arr) {
+ process.nextTick(function() {
+ done(null, arr)
+ })
+ }, done)
}
- function onEnd(err) {
- done(err, arr)
- cleanup()
- }
-
- function cleanup() {
- arr = null
- stream.removeListener('data', onData)
- stream.removeListener('end', onEnd)
- stream.removeListener('error', onEnd)
- stream.removeListener('close', cleanup)
- }
-} \ No newline at end of file
+ return deferred
+}