333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# ready-callback
 
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][codecov-image]][codecov-url]
[![David deps][david-image]][david-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
[travis-image]: https://img.shields.io/travis/node-modules/ready-callback.svg?style=flat-square
[travis-url]: https://travis-ci.org/node-modules/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
[david-image]: https://img.shields.io/david/node-modules/ready-callback.svg?style=flat-square
[david-url]: https://david-dm.org/node-modules/ready-callback
[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
 
```
$ npm install ready-callback
```
 
## Usage
 
**Note: ready-callback is using `class`, so you should use node>=2**
 
```
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.
 
```
// 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`.
 
```
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
 
```
var ready = require('ready-callback')({isWeakDep: true});
```
 
### Ready Status
 
You can get status every callback end.
 
```
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.
 
```
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
 
```
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.