You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.8 KiB
Markdown

3 months ago
# promisify-event
Gives you a Promise for a specified event on an EventEmitter that is only expected to happen once. Also automatically wires up the `error` event.
Works with anything that implements the Node.js EventEmitter API (which is pretty much everything other than the DOM).
Note that this is __not__ suitable for events that are expected to be emitted multiple times, because Promises can only represent one-off successes and failures; if you need a series of values over time, you may want to look at [Promistreams](https://promistream.cryto.net/) and particularly [`@promistream/from-event-emitter`](https://www.npmjs.com/package/@promistream/from-event-emitter) instead.
## Example
Also included in the package in runnable form, as `example.js`.
```js
"use strict";
const createEventEmitter = require("create-event-emitter");
const promisifyEvent = require("./");
// Demonstrated with a dummy event emitter, but it works with any EventEmitter
let emitter = createEventEmitter();
(async function () {
console.log("waiting...");
await promisifyEvent(emitter, "test");
console.log("emitted!");
})();
console.log("emitting...");
emitter.emit("test");
/* Output:
waiting...
emitting...
emitted!
*/
```
## API
### promisifyEvent(emitter, eventName)
- __emitter:__ Any `EventEmitter`. This is the emitter that you want to listen for the event on.
- __eventName:__ The event name to watch for.
__Returns:__ A Promise that resolves when the event occurs, or rejects (with the error in question) if an `error` event occurs first.
Note that when the Promise resolves successfully, it resolves with an *array of* arguments passed to the event callback, as event handlers may receive any number of arguments. It's recommended to use array destructuring syntax to unpack it into variables.