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.
30 lines
595 B
30 lines
595 B
|
|
module.exports = function () { |
|
var _read, _cb, abortCb, _end |
|
|
|
var read = function (end, cb) { |
|
if(!_read) { |
|
if(end) { |
|
_end = end |
|
abortCb = cb |
|
} |
|
else |
|
_cb = cb |
|
} |
|
else _read(end, cb) |
|
} |
|
read.resolve = function (read) { |
|
if(_read) throw new Error('already resolved') |
|
_read = read |
|
if(!_read) throw new Error('no read cannot resolve!' + _read) |
|
if(_cb) read(null, _cb) |
|
if(abortCb) read(_end, abortCb) |
|
} |
|
read.abort = function(err) { |
|
read.resolve(function (_, cb) { |
|
cb(err || true) |
|
}) |
|
} |
|
return read |
|
} |
|
|
|
|