Wait the first event in a set of event pairs, then clean up after itself.
$ npm install await-first --save
awaitFirst(ee, events)
const EventEmitter = require('events');
const awaitFirst = require('await-first');
async function waitMessageOrClose(ee) {
const o = await awaitFirst(ee, [ 'message', 'close' ]);
switch (o.event) {
case 'message':
const msg = o.args[0]; // [ 'hello world' ]
console.log('new message =>', msg);
break;
case 'close':
console.log('closed');
break;
}
}
const ee = new EventEmitter();
waitMessageOrClose(ee);
setTimeout(() => {
ee.emit('message', 'hello world');
}, 1000);
obj.awaitFirst(events)
const net = require('net');
const awaitFirst = require('await-first');
async function connect() {
const socket = net.connect(8080, '127.0.0.1');
socket.awaitFirst = awaitFirst;
try {
// wait `connect` or `error` event
await socket.awaitFirst([ 'connect', 'error' ]);
} catch (err) {
console.log(err);
}
// ...
}
connect();