diff --git a/src/common/lib/util/eventemitter.ts b/src/common/lib/util/eventemitter.ts index 61baaab46f..d24e448e8b 100644 --- a/src/common/lib/util/eventemitter.ts +++ b/src/common/lib/util/eventemitter.ts @@ -243,11 +243,8 @@ class EventEmitter { const argCount = args.length; if ((argCount === 0 || (argCount === 1 && typeof args[0] !== 'function')) && Platform.Config.Promise) { const event = args[0]; - if (typeof event !== 'string') { - throw new Error('EventEmitter.once(): Invalid arguments:' + Platform.Config.inspect(args)); - } return new Platform.Config.Promise((resolve) => { - this.once(event, resolve); + this.once(event as string | string[] | null, resolve); }); } diff --git a/test/realtime/event_emitter.test.js b/test/realtime/event_emitter.test.js index 72c58b35e6..eeb2d91851 100644 --- a/test/realtime/event_emitter.test.js +++ b/test/realtime/event_emitter.test.js @@ -468,6 +468,32 @@ define(['shared_helper', 'chai'], function (helper, chai) { closeAndFinish(done, realtime, err); }); }); + + it('anyEventsWithOnce', function (done) { + var realtime = helper.AblyRealtime({ autoConnect: false }), + eventEmitter = realtime.connection; + + const p = eventEmitter.once(); + eventEmitter.emit('b'); + p.then(function () { + closeAndFinish(done, realtime); + }).catch(function (err) { + closeAndFinish(done, realtime, err); + }); + }); + + it('arrayOfEventsWithOnce', function (done) { + var realtime = helper.AblyRealtime({ autoConnect: false }), + eventEmitter = realtime.connection; + + const p = eventEmitter.once(['a', 'b', 'c']); + eventEmitter.emit('b'); + p.then(function () { + closeAndFinish(done, realtime); + }).catch(function (err) { + closeAndFinish(done, realtime, err); + }); + }); }); } });