Skip to content

Commit dcbb97c

Browse files
author
Eetay Natan
committed
renamed options
1 parent 2466ede commit dcbb97c

File tree

3 files changed

+60
-15
lines changed

3 files changed

+60
-15
lines changed

README.md

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ function nextPromise({index, data}) {
2626

2727
var all = promisePool({
2828
threads: 3, // maximum parallel promises
29-
next_promise: nextPromise, // function to get/generate next promise
30-
next_promise_data: 17 // user data for the next_promise function
29+
promises: nextPromise, // function to get/generate next promise
30+
context_data: 17 // user data for the next_promise function
3131
})
3232

3333
all.then(function(result) {
@@ -78,34 +78,49 @@ const promiseList = [
7878

7979
promisePool({
8080
threads: 3,
81-
next_promise: promiseList, // List of promises
82-
next_promise_data: 'data for context'
81+
promises: promiseList, // List of promises
82+
context_data: 'data for context'
8383
}).then(function(result) {
8484
...
8585
})
8686
```
8787

88+
## Using generator to generate promises:
89+
90+
```javascript
91+
function *createPromiseMaker() {
92+
for (var i=0; i<10; i+=1) {
93+
yield new Promise(...)
94+
}
95+
}
96+
97+
const pool = promisePool({
98+
threads: 3,
99+
promises: createPromiseMaker()
100+
})
101+
```
102+
88103
## Nested promise pools:
89104

90105
```javascript
91106
const innerPool = promisePool({
92107
threads: 2,
93-
next_promise: [
108+
promises: [
94109
makePromise(2),
95110
makePromise(3),
96111
makePromise(4),
97112
makePromise(5)
98113
],
99-
next_promise_data: 'secondary promise pool'
114+
context_data: 'secondary promise pool'
100115
})
101116
const pool = promisePool({
102117
threads: 3,
103-
next_promise: [
118+
promises: [
104119
makePromise(0),
105120
makePromise(1),
106121
innerPool
107122
],
108-
next_promise_data: 'primary promise pool'
123+
context_data: 'primary promise pool'
109124
})
110125
pool.then(function(result) {
111126
...
@@ -119,3 +134,11 @@ pool.then(function(result) {
119134
- wait for all to resolve even if some are rejected (same as Promise.when)
120135
- support listeners for individual promise completions/rejections
121136
137+
## migration from previous versions:
138+
the following option keys are renamed:
139+
1. next_promise_data -> context_data
140+
2. next_promise -> promises
141+
2. max_parallel -> threads
142+
143+
you can still use the older option keys, but they are deprecated
144+

promise-pool.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
function promisePool({max_parallel, next_promise, next_promise_data, threads, promises, user_data}) {
1+
function promisePool({max_parallel, next_promise, next_promise_data, threads, promises, context_data}) {
22
var promises_generator = promises || next_promise
33
var self = {
44
threads: max_parallel || threads,
55
started: 0,
66
ended: 0,
77
promises_generator: Array.isArray(promises_generator) ? [...promises_generator] : promises_generator,
8-
next_promise_data: next_promise_data || user_data,
8+
next_promise_data: next_promise_data || context_data,
99
results: []
1010
}
1111
self.live = self.threads
@@ -17,7 +17,7 @@ function promisePool({max_parallel, next_promise, next_promise_data, threads, pr
1717
data: self.next_promise_data,
1818
ended: false
1919
}
20-
const next = Array.isArray(self.promises_generator) ? self.promises_generator.shift() : self.promises_generator({ index: self.started, data: self.next_promise_data })
20+
const next = promises_generator.next ? promises_generator.next().value : (Array.isArray(self.promises_generator) ? self.promises_generator.shift() : self.promises_generator({ index: self.started, data: self.next_promise_data }))
2121
self.started += 1
2222
if (next && next.then) {
2323
//console.log('promise ' + JSON.stringify(context))

spec/promise-pool.spec.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,31 @@ test('Nested promise pools', (done) => {
5454
})
5555
})
5656

57-
test('Array of promises', (done) => {
58-
expect.assertions(1)
57+
test('Generator functions', (done) => {
58+
expect.assertions(2)
59+
var total = 10
60+
function *createPromiseMaker() {
61+
for (var i=0; i<total; i+=1) {
62+
yield makePromise(i, randomTimeout())
63+
}
64+
}
65+
const pool = promisePool({
66+
threads: 3,
67+
promises: createPromiseMaker()
68+
})
69+
pool.then(function(result) {
70+
expect(result.length).toBe(total)
71+
expect(result[2].result).toEqual(2)
72+
done()
73+
})
74+
})
75+
76+
77+
test('Array of promises & order of execution', (done) => {
78+
expect.assertions(3)
5979
const promiseList = [
60-
makePromise(0),
61-
makePromise(1)
80+
makePromise(0,20),
81+
makePromise(1,10)
6282
]
6383
const pool = promisePool({
6484
threads: 3,
@@ -67,6 +87,8 @@ test('Array of promises', (done) => {
6787
})
6888
pool.then(function(result) {
6989
expect(result.length).toBe(promiseList.length)
90+
expect(result[1].result).toBe(1)
91+
expect(result[1].context.ended).toBe(0) // first to finish
7092
done()
7193
})
7294
})

0 commit comments

Comments
 (0)