# ready-callback

> Launch server after all async task ready

Latest version **4.0.0** (published 2023-10-11) · MIT license · 0 weekly downloads

## Install

```sh
npm install ready-callback
pnpm add ready-callback
yarn add ready-callback
bun add ready-callback
```

## Health

**Score 35/100 (D)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; has provenance; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.0.0 |
| Published | 2023-10-11 |
| First published | 2015-10-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=16.0.0 |
| Dependencies | 2 |
| Unpacked size | 27.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 26 |
| Author | popomore |
| Maintainers | fengmk2, popomore |
| Keywords | koa, ready, async |

## Links

- npm: https://www.npmjs.com/package/ready-callback
- Repository: https://github.com/node-modules/ready-callback
- Issues: https://github.com/node-modules/ready-callback/issues
- npm.io page: https://npm.io/package/ready-callback

## Dependencies (2)

- [once](https://npm.io/package/once.md) ^1.4.0
- [get-ready](https://npm.io/package/get-ready.md) ^3.1.0

## 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

- 4.0.0 (latest) — 2023-10-11
- 3.0.0 — 2023-01-03
- 2.1.0 — 2018-08-21
- 2.0.1 — 2017-02-12
- 2.0.0 — 2017-02-09
- 1.0.0 — 2015-10-20

## README

# ready-callback

[![NPM version][npm-image]][npm-url]
[![CI](https://github.com/node-modules/ready-callback/actions/workflows/ci.yml/badge.svg)](https://github.com/node-modules/ready-callback/actions/workflows/ci.yml)
[![Test coverage][codecov-image]][codecov-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/ready-callback.svg?style=flat-square
[npm-url]: https://npmjs.org/package/ready-callback
[codecov-image]: https://codecov.io/github/node-modules/ready-callback/coverage.svg?branch=master
[codecov-url]: https://codecov.io/github/node-modules/ready-callback?branch=master
[download-image]: https://img.shields.io/npm/dm/ready-callback.svg?style=flat-square
[download-url]: https://npmjs.org/package/ready-callback

Launch server after all async task ready

---

## Install

```bash
$ npm install ready-callback
```

## Usage

**Note: ready-callback is using `class`, so you should use node>=2**

```js
var koa = require('koa');
var ready = require('ready-callback')();
var app = koa();
ready.mixin(app);

// register a service
var done = app.readyCallback('service');
serviceLaunch(done);

// callback will be fired after all service launched
app.ready(function() {
  app.listen();
});
```

### Error Handle

If task is called with error, `error` event will be emit, `ready` will never be called.

```js
// register a service that will emit error
var done = app.readyCallback('service');
serviceLaunch(function(err) {
  done(err);
});

// listen error event
app.on('error', function(err) {
  // catch error
});
```

### Weak Dependency

If you set a task weak dependency, task will be done without emit `error`.

```js
var done = app.readyCallback('service', {isWeakDep: true});
serviceLaunch(function(err) {
  done(err);
});

// will be ready
app.ready(function() {
  app.listen();
});

app.on('error', function(err) {
  // never be called
});
```

You can also set for all ready-callback

```js
var ready = require('ready-callback')({isWeakDep: true});
```

### Ready Status

You can get status every callback end.

```js
app.on('ready_stat', function(data) {
  console.log(data.id); // id of the ended task
  console.log(data.remain); // tasks waiting to be ended
});
```

### Timeout

You can set timeout when a task run a long time.

```js
var ready = require('ready-callback')({timeout: 1000});
ready.mixin(app);
app.on('ready_timeout', function(id) {
  // this will be called after 1s that `service` task don't complete
});

var done = app.readyCallback('service');
serviceLaunch(function() {
  // run a long time
  done();
});
```

You can also set timeout for every task

```js
ready.mixin(app);
app.on('ready_timeout', function(id) {
  // this will be called after 1s that `service` task don't complete
});

var done = app.readyCallback('service1', {timeout: 1000});
serviceLaunch(done);
```

### lazyStart

You can set a ready-callback object to lazyStart. It will not check 
ready status immediately, and should start manualy to check ready 
status.

```js
var ready = require('ready-callback')({ lazyStart: true });
yield sleep(1);
// ready obj is not ready
ready.start();
yield sleep(1);
// ready obj is ready now
```

## LISENCE

Copyright (c) 2015 popomore. Licensed under the MIT license.

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