ig-types 6.24.12 → 6.24.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Promise.js +29 -13
- package/package.json +1 -1
- package/test.js +26 -0
package/Promise.js
CHANGED
|
@@ -306,6 +306,18 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
306
306
|
: list },
|
|
307
307
|
// transform/handle packed array (sync, but can return promises in the list)...
|
|
308
308
|
// XXX need a strict spec...
|
|
309
|
+
// XXX BUG???
|
|
310
|
+
// await Promise.iter([
|
|
311
|
+
// Promise.sync.resolve([1,1,1]),
|
|
312
|
+
// [2,2,2],
|
|
313
|
+
// Promise.resolve([3,3,3]),
|
|
314
|
+
// Promise.iter([4,4,4]),
|
|
315
|
+
// Promise.all([5,5,5]),
|
|
316
|
+
// ],
|
|
317
|
+
// e => e instanceof Array ? [[1,2,3]] : e)
|
|
318
|
+
// -> [ 1, 2, 3, [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ] ]
|
|
319
|
+
// ...the fist result seems odd...
|
|
320
|
+
// XXX FIXED but need to add a test for IterablePromise branch below...
|
|
309
321
|
__handle: function(list, handler=undefined, onerror=undefined){
|
|
310
322
|
var that = this
|
|
311
323
|
if(typeof(list) == 'function'){
|
|
@@ -325,38 +337,42 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
325
337
|
'smap'
|
|
326
338
|
: 'map'
|
|
327
339
|
var stop = false
|
|
340
|
+
var unwrap = function(elem){
|
|
341
|
+
return elem.length == 1 ?
|
|
342
|
+
elem[0]
|
|
343
|
+
: elem }
|
|
328
344
|
return list
|
|
329
345
|
[map](
|
|
330
346
|
function(elem){
|
|
331
347
|
return elem instanceof IterablePromise ?
|
|
332
|
-
// XXX should
|
|
348
|
+
// XXX should elem be expanded??? (like Array below)
|
|
333
349
|
(elem.isSync() ?
|
|
334
350
|
handler(elem.sync())
|
|
335
351
|
// XXX need to handle this but keep it IterablePromise...
|
|
336
352
|
: elem.iterthen(handler))
|
|
353
|
+
// sync sync promise...
|
|
337
354
|
: (elem instanceof SyncPromise
|
|
338
355
|
&& !(elem.sync() instanceof Promise)) ?
|
|
339
|
-
|
|
340
|
-
handler(elem.sync())
|
|
356
|
+
[handler(unwrap(elem.sync()))]
|
|
341
357
|
// promise / promise-like...
|
|
342
358
|
: elem && elem.then ?
|
|
343
359
|
// NOTE: when this is explicitly stopped we
|
|
344
|
-
// do not call any more handlers
|
|
360
|
+
// do not call any more handlers after
|
|
361
|
+
// STOP is thrown/returned...
|
|
345
362
|
// XXX TEST!!!
|
|
346
363
|
elem.then(function(elem){
|
|
347
364
|
return !stop ?
|
|
348
|
-
handler(
|
|
349
|
-
elem.length == 1 ?
|
|
350
|
-
elem[0]
|
|
351
|
-
:elem)
|
|
365
|
+
handler(unwrap(elem))
|
|
352
366
|
: [] })
|
|
353
367
|
: elem instanceof Array ?
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
368
|
+
// NOTE: we are calling .flat() on the result
|
|
369
|
+
// so we need to keep a handled array as
|
|
370
|
+
// a single element by wrapping the return
|
|
371
|
+
// of handled(..)...
|
|
372
|
+
[handler(unwrap(elem))]
|
|
358
373
|
: handler(elem) },
|
|
359
|
-
|
|
374
|
+
// handle STOP...
|
|
375
|
+
function(){
|
|
360
376
|
stop = true })
|
|
361
377
|
.flat() },
|
|
362
378
|
//*/
|
package/package.json
CHANGED
package/test.js
CHANGED
|
@@ -265,6 +265,32 @@ var cases = test.Cases({
|
|
|
265
265
|
await Promise.iter([1, Promise.resolve(2), 3]),
|
|
266
266
|
[1, 2, 3],
|
|
267
267
|
'promises as elements')
|
|
268
|
+
|
|
269
|
+
// XXX need a recursive assert...
|
|
270
|
+
var should_be = [ [1], [2], [3], [4], [5] ]
|
|
271
|
+
var got = await Promise.iter([
|
|
272
|
+
[1,1,1],
|
|
273
|
+
Promise.sync.resolve([2,2,2]),
|
|
274
|
+
Promise.resolve([3,3,3]),
|
|
275
|
+
Promise.iter([4,4,4]),
|
|
276
|
+
Promise.all([5,5,5]),
|
|
277
|
+
],
|
|
278
|
+
function(e){
|
|
279
|
+
return e instanceof Array ?
|
|
280
|
+
[[ e[0] ]]
|
|
281
|
+
// XXX
|
|
282
|
+
: e })
|
|
283
|
+
assert(
|
|
284
|
+
should_be
|
|
285
|
+
.reduce(function(res, e, i){
|
|
286
|
+
//console.log('---', e, got[i])
|
|
287
|
+
if(res === false){
|
|
288
|
+
return false }
|
|
289
|
+
return e instanceof Array
|
|
290
|
+
&& got[i] instanceof Array
|
|
291
|
+
&& e.length == got[i].length
|
|
292
|
+
&& e[0] == got[i][0] }, true),
|
|
293
|
+
'pack/unpack')
|
|
268
294
|
},
|
|
269
295
|
|
|
270
296
|
// Date.js
|