diff --git a/Promise.js b/Promise.js index 58eacf8..cd76c50 100644 --- a/Promise.js +++ b/Promise.js @@ -851,33 +851,29 @@ object.Constructor('IterablePromise', Promise, { // NOTE: this is needed for self-resolve... writable: true, }) + // handle promise state... try{ var res = obj.__unpack(list) }catch(err){ promise.reject(err) } - res instanceof Promise ? - res - .then(function(list){ - promise.resolve(list) }) - .catch(promise.reject) - : promise.resolve(res) - // XXX EXPEREMENTAL - // XXX do we handle errors here??? - // self-resolve state... - list instanceof Promise ? - list.then(function(list){ - obj.__packed = list }) - /*/ XXX use selfResolve(..) - : selfResolve(list) } - /*/ - : list.forEach(function(elem, i){ + + if(res instanceof Promise){ + res.then( + function(list){ + promise.resolve(list) + // self-resolve... + obj.__packed = list }, + handleError) + } else { + promise.resolve(res) + // self-resolve... + res.forEach(function(elem, i){ elem instanceof Promise && elem.then(function(elem){ lst = obj.__packed.slice() lst[i] = elem - obj.__packed = lst }) }) } - //*/ + obj.__packed = lst }) }) } } return obj }, }) diff --git a/package.json b/package.json index 234796c..ea4471b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.25.0", + "version": "6.25.1", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": { diff --git a/test.js b/test.js index fe8bb05..3fac3ed 100755 --- a/test.js +++ b/test.js @@ -495,7 +495,21 @@ var cases = test.Cases({ function(err){ return 'done' }) == 'done', - `.${iter}(..): late onerror(..)`) } + `.${iter}(..): late onerror(..)`) + assert( + await Promise[iter]( + (function*(){ + yield* [1,2,3] + throw 'ERROR' })(), + function(e){ + if(e == 4){ + throw 'ERROR' } + return e }, + function(err){ + return 'done' }) + == 'done', + `.${iter}(..): late onerror(..)`) + } }, // Date.js