From e0cc0e6a14e4e79d2109cd51dd80f5c128942590 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 28 Jan 2023 01:48:28 +0300 Subject: [PATCH] refactored runner's FinalizableQueue(..)... Signed-off-by: Alex A. Naanou --- package.json | 2 +- runner.js | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 79bfa4b..7085eb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.24.18", + "version": "6.24.19", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": { diff --git a/runner.js b/runner.js index 5e34d83..3aa19d0 100644 --- a/runner.js +++ b/runner.js @@ -409,7 +409,7 @@ object.Constructor('Queue', Array, { // collect results... this.collect_results && res !== module.SKIP - && (this.__results = this.__results || []).push(res) + && (this.__results = this.__results ?? []).push(res) // handle task results... // @@ -573,13 +573,15 @@ object.Constructor('FinalizableQueue', Queue, { done: events.Event('done', function(handle){ // abort only once... - if(this.state == 'aborted' || this.state == 'done'){ + if(this.state == 'aborted' + || this.state == 'done'){ return handle(false) } this.__state = 'done' Object.freeze(this) }), abort: events.Event('abort', function(handle){ // abort only once... - if(this.state == 'aborted' || this.state == 'done'){ + if(this.state == 'aborted' + || this.state == 'done'){ return handle(false) } this.__state = 'aborted' Object.freeze(this) }), @@ -587,18 +589,22 @@ object.Constructor('FinalizableQueue', Queue, { // NOTE: each handler will get called once when the next time the // queue is emptied... promise: function(){ - var that = this - return new Promise(function(resolve, reject){ - that - .one('done', function(){ - resolve(...(that.collect_results ? - [that.__results || []] - : [])) }) - .one('abort', reject) }) }, + return this.__promise }, then: function(onresolve, onreject){ return this.promise().then(...arguments) }, catch: function(onreject){ return this.promise().catch(...arguments) }, + + __init__: function(options){ + var that = this + this.__promise = new Promise(function(resolve, reject){ + that + .one('done', function(){ + resolve(...(that.collect_results ? + [that.__results ?? []] + : [])) }) + .one('abort', reject) }) + return object.parentCall(FinalizableQueue.prototype.__init__, this, ...arguments) }, })