diff --git a/Promise.js b/Promise.js index b0abb88..25a9ed6 100644 --- a/Promise.js +++ b/Promise.js @@ -34,6 +34,45 @@ var generator = require('./generator') +//--------------------------------------------------------------------- +// XXX EXPERIMENTING... + +// +// pack() +// pack() +// -> +// -> +// +// ::= +// +// | +// +// ::= +// [ +// +// | +// | +// | , +// ... +// ] +// +var pack = +module.pack = +function(list){ +} + +var handle = +module.handle = +function(list, handler, onerror){ +} + +var unpack = +module.unpack = +function(list){ +} + + + //--------------------------------------------------------------------- // Iterable promise... // @@ -198,6 +237,7 @@ object.Constructor('IterablePromise', Promise, { list = list instanceof Array ? list : [list] + var map = !!this.constructor.STOP ? 'smap' : 'map' @@ -217,6 +257,7 @@ object.Constructor('IterablePromise', Promise, { EMPTY : e }) : res }) + // XXX this will not expand promise results... .flat() : handler(elem) } return list @@ -269,6 +310,7 @@ object.Constructor('IterablePromise', Promise, { e = e.__unpack() } if(e instanceof SyncPromise){ e = e.sync() } + // give up on a sync solution... if(e instanceof Promise){ // XXX can we return an IterablePromise??? @@ -278,6 +320,7 @@ object.Constructor('IterablePromise', Promise, { // XXX do we need to handle EMPTY??? return list.flat() }) .iter() } + res.push(e) } return res.flat() }, diff --git a/test.js b/test.js index 81f57a6..796408a 100755 --- a/test.js +++ b/test.js @@ -327,19 +327,21 @@ var cases = test.Cases({ [1,2,3,4,5,6], 'Promise.seqiter(..) handle order') - // XXX handler... - var async_handler = async function(input, output, handler, msg){ + + var test_async_handler = async function(input, output, handler, msg){ + // sanity check... assert.array( await Promise.iter(input, handler), output, - msg) + msg+' (sanity check)') assert.array( await Promise.iter(input, function(e){ - return handler(e) }), + return Promise.resolve(handler(e)) }), await Promise.iter(input, handler), - msg) } - await async_handler( + msg) } + + await test_async_handler( [ 1, [2], @@ -347,9 +349,10 @@ var cases = test.Cases({ Promise.resolve([4]), ], [], - function(e){ return [] }, - 'handler returns promise - empty') - await async_handler( + function(e){ + return [] }, + 'handler returns promise (empty)') + await test_async_handler( [ 1, [2], @@ -357,50 +360,9 @@ var cases = test.Cases({ Promise.resolve([4]), ], [ 'moo', 'moo', 'moo', 'moo' ], - function(e){ return ['moo'] }, - 'handler returns promise - array') - - /* - assert.array( - await Promise.iter( - [ - 1, - [2], - Promise.resolve(3), - Promise.resolve([4]), - ], - e => Promise.resolve([])), - //[], - await Promise.iter( - [ - 1, - [2], - Promise.resolve(3), - Promise.resolve([4]), - ], - e => []), - 'handler returns promise - empty') - assert.array( - await Promise.iter( - [ - 1, - [2], - Promise.resolve(3), - Promise.resolve([4]), - ], - e => Promise.resolve(['moo'])), - // XXX what should this return??? - //[ 'moo', 'moo', 'moo', 'moo' ], - await Promise.iter( - [ - 1, - [2], - Promise.resolve(3), - Promise.resolve([4]), - ], - e => ['moo']), - 'handler returns promise - array') - //*/ + function(e){ + return ['moo'] }, + 'handler returns promise (array)') }, // Date.js