Spaces:
Runtime error
Runtime error
| var streamify = require('./streamify.js') | |
| , defer = require('./defer.js') | |
| ; | |
| // API | |
| module.exports = ReadableAsyncKit; | |
| /** | |
| * Base constructor for all streams | |
| * used to hold properties/methods | |
| */ | |
| function ReadableAsyncKit() | |
| { | |
| ReadableAsyncKit.super_.apply(this, arguments); | |
| // list of active jobs | |
| this.jobs = {}; | |
| // add stream methods | |
| this.destroy = destroy; | |
| this._start = _start; | |
| this._read = _read; | |
| } | |
| /** | |
| * Destroys readable stream, | |
| * by aborting outstanding jobs | |
| * | |
| * @returns {void} | |
| */ | |
| function destroy() | |
| { | |
| if (this.destroyed) | |
| { | |
| return; | |
| } | |
| this.destroyed = true; | |
| if (typeof this.terminator == 'function') | |
| { | |
| this.terminator(); | |
| } | |
| } | |
| /** | |
| * Starts provided jobs in async manner | |
| * | |
| * @private | |
| */ | |
| function _start() | |
| { | |
| // first argument – runner function | |
| var runner = arguments[0] | |
| // take away first argument | |
| , args = Array.prototype.slice.call(arguments, 1) | |
| // second argument - input data | |
| , input = args[0] | |
| // last argument - result callback | |
| , endCb = streamify.callback.call(this, args[args.length - 1]) | |
| ; | |
| args[args.length - 1] = endCb; | |
| // third argument - iterator | |
| args[1] = streamify.iterator.call(this, args[1]); | |
| // allow time for proper setup | |
| defer(function() | |
| { | |
| if (!this.destroyed) | |
| { | |
| this.terminator = runner.apply(null, args); | |
| } | |
| else | |
| { | |
| endCb(null, Array.isArray(input) ? [] : {}); | |
| } | |
| }.bind(this)); | |
| } | |
| /** | |
| * Implement _read to comply with Readable streams | |
| * Doesn't really make sense for flowing object mode | |
| * | |
| * @private | |
| */ | |
| function _read() | |
| { | |
| } | |