# eventasync

> node.js event emitter monkey patch for supporting asynchronous listeners

Latest version **1.0.0** (published 2016-02-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install eventasync
pnpm add eventasync
yarn add eventasync
bun add eventasync
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2016-02-29 |
| First published | 2016-02-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 28 |
| Author | Tyr Chen |
| Maintainers | tyrchen |
| Keywords | event, eventEmitter, async, reactive |

## Links

- npm: https://www.npmjs.com/package/eventasync
- Repository: https://github.com/tyrchen/node-eventasync
- Homepage: https://github.com/tyrchen/node-eventasync#readme
- Issues: https://github.com/tyrchen/node-eventasync/issues
- npm.io page: https://npm.io/package/eventasync

## Dependencies (1)

- [rx](https://npm.io/package/rx.md) ^4.0.8

## Alternatives

- [async-exit-hook](https://npm.io/package/async-exit-hook.md) — 3.7M weekly downloads
- [evnty](https://npm.io/package/evnty.md) — 7.2K weekly downloads
- [eleventy-plugin-asciidoc](https://npm.io/package/eleventy-plugin-asciidoc.md) — 3.5K weekly downloads
- [@jswork/next-get2get](https://npm.io/package/@jswork/next-get2get.md) — 945 weekly downloads
- [@dashersw/axon](https://npm.io/package/@dashersw/axon.md) — 934 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2016-02-29
- 0.1.0 — 2016-02-29

## README

# node-eventasync

node.js event emitter monkey patch for supporting asynchronous listeners.

## Install

```bash
$ npm install eventasync
```

## Usage

To use eventasync, just require it like this:

```js
const EventEmitter = require('events').EventEmitter;
require('eventasync');

const ev = new EventEmitter();

ev.emitAsync('event1');
ev.emitAsyncSeq('event2');
```

``emitAsync`` will call the registered listeners in parallel. ``emitAsyncSeq`` will call the registered listeners in sequence.  Both of them will return a ``Promise`` so that caller function can evaluate the result (or error) by using ``Promise`` interface.

For event listeners, if it is an async operation, you need to return a ``Promise`` for that async operation.

``emitAsync`` uses ``Rx.Observable.mergeAll()``, and ``emitAsyncSeq`` uses ``Rx.Observable.concatAll()``.

## Examples

Here's an example for running all listeners in sequence:

```js
const EventEmitter = require('events').EventEmitter;
require('eventasync');

const ev = new EventEmitter();
ev.data = [];

const listener1 = data => {
  return new Promise(res => {
    setTimeout(() => {
      data.push(1);
      res(true);
    }, 400);
  });
}

const listener2 = data => data.push(2);

const listener3 = data => {
  return new Promise(res => {
    setTimeout(() => {
      data.push(3);
      res(true);
    }, 200);
  });
}

ev.on('event', listener1);
ev.on('event', listener2);
ev.on('event', listener3);

const promise = ev.emitAsyncSeq('event', ev.data);
promise.then(() => {
  ev.data.push(4);
  console.log('data:', ev.data);
});
// data: [ 1, 2, 3, 4 ]
```

Here an example for running all listeners in parallel, while one of them throw an error:

```js
const EventEmitter = require('events').EventEmitter;
require('eventasync');

const ev = new EventEmitter();
ev.data = [];

const listener1 = data => {
  return new Promise((res, rej) => {
    setTimeout(() => {
      rej('Something is wrong!');
    }, 400);  
  });
}

const listener2 = data => {
  return new Promise(res => {
    setTimeout(() => {
      data.push(2);
      res(true);
    }, 200);  
  });
}

const listener3 = data => data.push(3);

ev.on('event', listener1);
ev.on('event', listener2);
ev.on('event', listener3);

const promise = ev.emitAsync('event', ev.data);
promise.then(() => {
  ev.data.push(4);
  console.log('data:', ev.data);
}).catch(err => {
  console.log(err, ev.data);
});
// Something is wrong! [ 3, 2 ]
```

## License

MIT. See [LICENSE](./LICENSE).

---
_Source: https://npm.io/package/eventasync · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
