diff --git a/Promise.js b/Promise.js index efbcf32..c90b10d 100644 --- a/Promise.js +++ b/Promise.js @@ -324,33 +324,40 @@ object.Constructor('IterablePromise', Promise, { var map = !!this.constructor.STOP ? 'smap' : 'map' + var stop = false return list - [map](function(elem){ - return elem instanceof IterablePromise ? - // XXX should this be expanded??? (like Array below) - (elem.isSync() ? + [map]( + function(elem){ + return elem instanceof IterablePromise ? + // XXX should this be expanded??? (like Array below) + (elem.isSync() ? + handler(elem.sync()) + // XXX need to handle this but keep it IterablePromise... + : elem.iterthen(handler)) + : (elem instanceof SyncPromise + && !(elem.sync() instanceof Promise)) ? + // XXX should this be expanded??? (like Array below) handler(elem.sync()) - // XXX need to handle this but keep it IterablePromise... - : elem.iterthen(handler)) - : (elem instanceof SyncPromise - && !(elem.sync() instanceof Promise)) ? - // XXX should this be expanded??? (like Array below) - handler(elem.sync()) - // promise / promise-like... - : elem && elem.then ? - // XXX handle STOP -- no need to call handlers after a STOP... - // ...is there a way to detect STOP from inside .smap(..) ??? - elem.then(function(elem){ - return handler( + // promise / promise-like... + : elem && elem.then ? + // NOTE: when this is explicitly stopped we + // do not call any more handlers... + // XXX TEST!!! + elem.then(function(elem){ + return !stop ? + handler( + elem.length == 1 ? + elem[0] + :elem) + : [] }) + : elem instanceof Array ? + [handler( elem.length == 1 ? elem[0] - :elem) }) - : elem instanceof Array ? - [handler( - elem.length == 1 ? - elem[0] - : elem)] - : handler(elem) }) + : elem)] + : handler(elem) }, + function(res){ + stop = true }) .flat() }, //*/ // XXX this should return IterablePromise if .__packed is partially sync (???) diff --git a/package.json b/package.json index 8315b90..e1b0c8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.24.11", + "version": "6.24.12", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": {