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() {
}