From ac26ca9dcf1ac87f793aa069a12b4fcd796d6b09 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Thu, 8 Dec 2022 01:28:01 +0300 Subject: [PATCH] some tweaking... Signed-off-by: Alex A. Naanou --- Promise.js | 40 +++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/Promise.js b/Promise.js index a764f88..aabab8b 100644 --- a/Promise.js +++ b/Promise.js @@ -1048,37 +1048,39 @@ object.Mixin('PromiseMixin', 'soft', { cooperative: CooperativePromise, sync: SyncPromise, // XXX should this be implemented via SyncPromise??? + // XXX not sure if we need to expand async generators... awaitOrRun: function(data, func, error){ data = [...arguments] func = data.pop() if(typeof(data.at(-1)) == 'function'){ error = func func = data.pop() } - // ceck if we need to await... - return data - .reduce(function(res, e){ + error = error ? + [error] + : [] + // check if we need to await... + return data.reduce(function(res, e){ return res || e instanceof Promise }, false) ? - // NOTE: we will not reach this on empty data... - (data.length > 1 ? - Promise.all(data) - .then( - function(res){ - return func(...res) }, - ...(error ? - [error] - : [])) - : data[0].then( - func, - ...(error ? - [error] - : []))) - : error ? + // NOTE: we will not reach this on empty data... + (data.length > 1 ? + Promise.all(data) + .then( + function(res){ + return func(...res) }, + ...error) + : data[0].then(func, ...error)) + // XXX not sure if we need to expand async generators... + : (data.length == 1 + && Symbol.asyncIterator in data[0] + && 'then' in data[0]) ? + data[0].then(func, ...error) + : error.length > 0 ? function(){ try{ return func(...data) }catch(err){ - return error(err) } }() + return error[0](err) } }() : func(...data) }, }) diff --git a/package.json b/package.json index 6c7023a..866e694 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.24.9", + "version": "6.24.10", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": {