diff --git a/blocker.js b/blocker.js index bb485e7..c9b206e 100644 --- a/blocker.js +++ b/blocker.js @@ -10,8 +10,14 @@ util.inherits(Blocker, Transform) Blocker.prototype.block = function (size, callback) { ok(!this._next, 'size already set') - this._next = { size: size, callback: callback } - this._consume() + if (this._error) { + var error = this._error + delete this._error + callback(error) + } else { + this._next = { size: size, callback: callback } + this._consume() + } } Blocker.prototype._read = function () { @@ -37,6 +43,8 @@ Blocker.prototype.interrupt = function (error) { var callback = this._next.callback delete this._next callback(error) + } else { + this._error = error } } diff --git a/t/blocker/block.t.js b/t/blocker/block.t.js index e980586..a463e7e 100644 --- a/t/blocker/block.t.js +++ b/t/blocker/block.t.js @@ -1,4 +1,4 @@ -require('proof')(3, prove) +require('proof')(4, prove) function prove (assert) { var Blocker = require('../..') @@ -17,7 +17,11 @@ function prove (assert) { }) pipe.write(buffer.slice(1)) - blocker.interrupt(new Error) + blocker.interrupt(new Error('interrupt')) + + blocker.block(16, function (error) { + assert(error.message, 'interrupt', 'interrupt') + }) blocker.block(16, function (error) { assert(error.message, 'interrupt', 'interrupt')