Skip to content

Commit 723c586

Browse files
committed
feat: reject emitted promise on error in EventEmitter
1 parent 946a3a2 commit 723c586

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/lib/EventEmitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
7474
: EventParameters<EventTypes, Event>
7575
> {
7676
return new Promise((resolve, reject) => {
77-
// TODO: handle errors
77+
if (event !== 'error') this.once('error', reject as any);
7878
this.once(event, resolve as any);
7979
});
8080
}

tests/lib/eventEmitter.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { EventEmitter } from 'openai/lib/EventEmitter';
2+
3+
interface TestEvents {
4+
foo: (value: string) => void;
5+
error: (err: Error) => void;
6+
}
7+
8+
class TestEmitter extends EventEmitter<TestEvents> {
9+
emitFoo(value: string) {
10+
this._emit('foo', value);
11+
}
12+
emitError(err: Error) {
13+
this._emit('error', err);
14+
}
15+
}
16+
17+
describe('EventEmitter.emitted', () => {
18+
test('resolves when event is emitted', async () => {
19+
const emitter = new TestEmitter();
20+
const promise = emitter.emitted('foo');
21+
emitter.emitFoo('bar');
22+
await expect(promise).resolves.toBe('bar');
23+
});
24+
25+
test('rejects if error emitted before event', async () => {
26+
const emitter = new TestEmitter();
27+
const promise = emitter.emitted('foo');
28+
const error = new Error('oops');
29+
emitter.emitError(error);
30+
emitter.emitFoo('bar');
31+
await expect(promise).rejects.toBe(error);
32+
});
33+
});

0 commit comments

Comments
 (0)