# listen

> Wait for the results of multiple callbacks

Latest version **1.0.1** (published 2016-08-17) · MIT license · 0 weekly downloads

## Install

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

## 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.1 |
| Published | 2016-08-17 |
| First published | 2012-05-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10 |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 16 |
| Author | Maximilian Antoni |
| Maintainers | mantoni |
| Keywords | callback, thenable, timeout, async, flow |

## Links

- npm: https://www.npmjs.com/package/listen
- Repository: https://github.com/mantoni/listen.js
- Homepage: http://maxantoni.de/projects/listen.js/
- Issues: https://github.com/mantoni/listen.js/issues
- npm.io page: https://npm.io/package/listen

## Alternatives

- [@commercetools/sync-actions](https://npm.io/package/@commercetools/sync-actions.md) — 25.1K weekly downloads
- [cwait](https://npm.io/package/cwait.md) — 21.4K weekly downloads
- [@ledgerhq/hw-app-cosmos](https://npm.io/package/@ledgerhq/hw-app-cosmos.md) — 4.2K weekly downloads
- [@financial-times/o-loading](https://npm.io/package/@financial-times/o-loading.md) — 2.8K weekly downloads
- [fa](https://npm.io/package/fa.md) — 185 weekly downloads

## Recent versions

- 1.0.1 (latest) — 2016-08-17
- 1.0.0 — 2013-05-14
- 0.4.0 — 2013-05-09
- 0.3.1 — 2013-03-03
- 0.3.0 — 2013-01-31
- 0.2.0 — 2012-11-04
- 0.1.4 — 2012-07-29
- 0.1.3 — 2012-07-11
- 0.1.2 — 2012-05-20
- 0.1.1 — 2012-05-18
- 0.1.0 — 2012-05-17

## README

# listen.js

[![Build Status]](https://travis-ci.org/mantoni/listen.js)
[![SemVer]](http://semver.org)
[![License]](https://github.com/mantoni/listen.js/blob/master/LICENSE)

A tiny library to wait for the results of multiple callbacks. For node and the
browser.

## Install

This will install the `listen` module in your current project and add it to the
`dependencies`:

```
npm install listen --save
```

## Usage

```js
var listen = require('listen');

var listener = listen();

var callbackA = listener();
var callbackB = listener();

/*
 * Do async stuff with callbacks.
 *
 * Callbacks follow the Node.js convention. They expect an error or null as
 * the first argument and an optional value as the second:
 *
 * Fail: callback(new Error('ouch!'));
 * Return: callback(null, 'some return value');
 */
listener.then(function (err, values) {
  /*
   * err    - 1) null if no callback received an error
   *          2) the error of the callback that received an error
   *          3) an error with name ErrorList wrapping multiple errors
   *
   * values - The non-undefined return values from all callbacks in order of
   *          callback creation, also exposing names callbacks (see API)
   */
});
```

# API

Start with `var listen = require('listen')`, then use the `listen` function to
create listeners. Use the listeners to create callbacks.

- `listen([values])`: Creates and returns a new listener function. If `values`
  are given, it must be an array with initial values.
- `listener([name][, func][, timeout])`: Creates a new callback associated with
  the listener. Throws if called after `then`. All arguments are optional and
  can be combined.
    - `name` exposes the return value of the callback on the values object
      under that name.
    - `func` gets invoked with `(err, value)` when the callback is invoked.
    - `timeout` calls the callback with a `TimeoutError` after the timeout.
- `listener.then(func)`: Invokes the given function once all callbacks where
  invoked. If none of the callbacks had errors, the first argument is `null`,
  otherwise it's an `Error`. The second argument is the values array in order
  of callback creation. Can only be called once.
- `listener.push(value)`: Pushes a value to the internal values array. Throws
  if called after `then`.
- `listener.err(error)`: Adds an error to the internal error list. Throws if
  called after `then`.

## Compatibility

The `listen` has 100% coverage and runs in these environments:

- Node 0.10, 0.12, 4.3 & 6.3
- IE 9, 10, 11
- Firefox
- Chore
- PhantomJS

## License

MIT

[Build Status]: http://img.shields.io/travis/mantoni/listen.js.svg
[SemVer]: http://img.shields.io/:semver-%E2%9C%93-brightgreen.svg
[License]: http://img.shields.io/npm/l/listen.svg

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