Skip to content

Commit 05a9b6e

Browse files
committed
Prevent the 'complete' event from firing more than once during non-sequential processing
1 parent 686d230 commit 05a9b6e

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ngnjs/queue",
3-
"version": "1.0.0-alpha.3",
3+
"version": "1.0.0-alpha.4",
44
"description": "A lightweight NGN queue/taskrunner.",
55
"type": "module",
66
"main": "src/index.js",
@@ -23,7 +23,7 @@
2323
"@ngnjs/plugin-debug": "^1.0.0-alpha"
2424
},
2525
"peerDependencies": {
26-
"ngn": ">=2.0.0-alpha.5",
26+
"ngn": "^2.0.0-alpha.5",
2727
"@ngnjs/plugin": ">=1.0.0-alpha.8"
2828
},
2929
"dependencies": {},
@@ -69,6 +69,9 @@
6969
"buildoption": {
7070
"preserveEntrySignatures": true
7171
},
72+
"autoimport": [
73+
"import ngn from 'ngn'"
74+
],
7275
"alias": {
7376
"ngn": "/node_modules/ngn/index.js",
7477
"@ngnjs/plugin": "/source/@ngnjs/plugin/index.js",

src/runner.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -265,17 +265,12 @@ export default class Queue extends EventEmitter {
265265
this.#timer = setTimeout(() => this.abort(true, activeItem), this.#timeout)
266266
}
267267

268-
this.afterOnce('task.done', this.size, () => {
269-
this.emit('complete')
270-
})
271-
272268
if (!sequential) {
269+
this.afterOnce('task.done', this.size, 'complete')
270+
273271
// Run in parallel
274272
// const TOKEN = Symbol('queue runner')
275-
this.afterOnce('blah.blah', this.size, 'complete')
276273
for (const task of this.#queue.items) {
277-
// task.once('done', () => this.emit('blah.blah'))
278-
// task.once('task.done', () => console.log('here'))
279274
task.run()
280275
}
281276
} else {

tests/01-sanity.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,18 @@ test('NGN Queue parallel execution', t => {
9797
x.push('Task 3')
9898
})
9999

100+
let ended = false
100101
tasks.on('complete', function () {
102+
if (ended) {
103+
t.fail("'complete' event fired more than once.")
104+
t.end()
105+
return
106+
}
107+
108+
ended = true
101109
t.expect(3, x.length, 'All functions ran in parallel.')
102-
t.end()
110+
111+
setTimeout(() => t.end(), 300)
103112
})
104113

105114
tasks.run()

0 commit comments

Comments
 (0)