You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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() {
}
|