프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / promise-queue / README.md

이력 | 보기 | 이력해설 | 다운로드 (2.53 KB)

1 39 HKM
# promise-queue [![NPM Version](https://badge.fury.io/js/promise-queue.png)](https://npmjs.org/package/promise-queue) [![Build Status](https://travis-ci.org/azproduction/promise-queue.png?branch=master)](https://travis-ci.org/azproduction/promise-queue) [![Coverage Status](https://coveralls.io/repos/azproduction/promise-queue/badge.png?branch=master)](https://coveralls.io/r/azproduction/promise-queue) [![Dependency Status](https://gemnasium.com/azproduction/promise-queue.png)](https://gemnasium.com/azproduction/promise-queue)
2
3
Promise-based queue
4
5
## Installation
6
7
`promise-queue` can be installed using `npm`:
8
9
```
10
npm install promise-queue
11
```
12
13
## Interface
14
15
 - `new Queue(Number maxConcurrent, Number maxQueued): Queue`
16
 - `Queue#add(Function generator): Promise` - adds function argument that generates a promise to the queue
17
 - `Queue#getQueueLength(): Number` - returns current length of buffer(added but not started promise generators) `it <= maxQueued`
18
 - `Queue#getPendingLength(): Number` - returns number of pending(concurrently running) promises `it <= maxConcurrent`
19
20
## Example
21
22
### Configure queue
23
24
By default `Queue` tries to use global Promises, but you can specify your own promises.
25
26
```js
27
Queue.configure(require('vow').Promise);
28
```
29
30
Or use old-style promises approach:
31
32
```js
33
Queue.configure(function (handler) {
34
    var dfd = $.Deferred();
35
    try {
36
        handler(dfd.resolve, dfd.reject, dfd.notify);
37
    } catch (e) {
38
        dfd.reject(e);
39
    }
40
    return dfd.promise();
41
});
42
```
43
44
### Queue one by one example
45
46
```js
47
var maxConcurrent = 1;
48
var maxQueue = Infinity;
49
var queue = new Queue(maxConcurrent, maxQueue);
50
51
app.get('/version/:user/:repo', function (req, res, next) {
52
    queue.add(function () {
53
        // Assume that this action is a way too expensive
54
        // Call of this function will be delayed on second request
55
        return downloadTarballFromGithub(req.params);
56
    })
57
    .then(parseJson('package.json'))
58
    .then(function (package) {
59
        res.send(package.version);
60
    })
61
    .catch(next);
62
});
63
```
64
65
### Getting number of pending promises and queue(buffered promises) length
66
67
```js
68
var maxConcurrent = 1;
69
var maxQueue = 1;
70
var queue = new Queue(maxConcurrent, maxQueue);
71
72
queue.add(function () {
73
    queue.getQueueLength() === 0;
74
    queue.getPendingLength() === 1;
75
    return somePromise();
76
});
77
78
queue.add(function () {
79
    queue.getQueueLength() === 0;
80
    queue.getPendingLength() === 0;
81
    return somePromise();
82
});
83
84
queue.getQueueLength() === 1;
85
queue.getPendingLength() === 1;
86
```
87
88
[Live example](http://jsfiddle.net/RVuEU/1/)