diff --git a/index.js b/index.js index 1fe769a..d137bfb 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,17 @@ 'use strict' -module.exports = function(emitter, event) { +module.exports = function(emitter, event, timeout) { if (typeof emitter === 'string') { + timeout = event event = emitter emitter = this } return new Promise((resolve, reject) => { const done = event === 'error' ? reject : resolve + if (timeout) { + setTimeout(reject, timeout, new Error('timeout')) + } emitter.once(event, done) }) } diff --git a/test/index.test.js b/test/index.test.js index 7d8bae6..7f4d92f 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -14,6 +14,21 @@ it('await event', () => { }) }) +it('await event with timeout', () => { + return co(function* () { + const e = new EventEmitter() + e.await = awaitEvent + try { + yield e.await('data', 1000) + } catch (e) { + if (e.message === 'timeout') { + return + } + } + throw new Error('boom') + }) +}) + it('await error', done => { co(function* () { const e = new EventEmitter()