experimenting...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2023-01-08 22:45:20 +03:00
parent f5fa0c16d2
commit 2b71ceda7a
2 changed files with 58 additions and 53 deletions

View File

@ -34,6 +34,45 @@ var generator = require('./generator')
//---------------------------------------------------------------------
// XXX EXPERIMENTING...
//
// pack(<array>)
// pack(<promise>)
// -> <packed>
// -> <packed>
//
// <packed> ::=
// <packed-array>
// | <packed-promise>
//
// <packed-array> ::=
// [
// <item>
// | <array-of-items>
// | <promise-item>
// | <promise-array-of-items>,
// ...
// ]
//
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() },

68
test.js
View File

@ -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